簡體   English   中英

AWS 紅移遷移

[英]AWS Redshift Migration

所以我在大約 2 個月前學會了如何在 SQL 中編碼,所以我仍然很新,每天仍在學習不同的命令/功能。 我的任務是將一些查詢從 Teradata 遷移到 Redshift,顯然存在一些不同的語法。 現在我已經能夠替換其中的大部分,但我被困在命令“SYS_CALENDAR”上。 有人可以向我解釋 SYS_CALENDAR 是如何工作的,這樣我就可以對其進行硬編碼,或者有人知道在 AWS Redshift 中運行的任何合適的替代品嗎?

謝謝

作為將大型 Teradata 解決方案移植到 Redshift 的人,讓我說好運吧。 這些是非常不同的系統,移植 SQL 以實現功能等效只是第一個挑戰。 如果您願意,我很高興就這些挑戰可能是什么進行交流,但首先是您的問題。

Teradata 中的 SYS_CALENDAR 是一個系統視圖,可以像保存每個日期信息的普通視圖一樣使用。 這可以根據需要進行查詢或連接,以獲取例如有關日期的星期幾或一年中的星期幾信息。 它確實根據操作系統信息執行日期計算 function 但用作視圖。

Redshift 中不存在等效視圖,這造成了一些移植困難。 許多人在 Redshift 中創建“DATES”表來保存他們在某個范圍內的日期所需的信息,並且有 web 頁面用於制作此類表(例如https://elliotchance.medium.com/building-a-date-dimension-表-in-redshift-6474a7130658 )。 只需預先計算數據庫中日期范圍所需的所有日期信息,即可在移植時將其交換為查詢。 這是最簡單的移植途徑,也是許多人選擇的途徑(有時是錯誤的)。

這條路線的問題是,用戶支持的 DATES 表通常是一個定時炸彈,等待 go 關閉和解決方案的技術債務。 此表僅包含您在創建時指定的日期,並且日期范圍通常會隨着時間的推移而擴大。 當它與不在 DATES 表中的日期一起使用時,會創建錯誤的答案,數據已損壞,並且通常是無聲的。 不好。 一些創建流程來擴大日期范圍,但這又是基於對如何使用表格的一些“預期”。 它也是一個真實的表,其中包含經常使用的不斷擴展的數據,這些數據經常導致潛在的查詢性能問題,並且並不是真正需要的——一直以來的性能稅。

更好的長期答案是使用本機 Redshift (Postgres) 日期函數根據需要對日期進行操作。 這樣做會使用操作系統對日期的理解(無限制),並執行 Teradata 對系統視圖所做的事情(計算所需的信息)。 例如,您可以通過使用 DATE_PART() function 而不是加入 SYS_CALENDAR 視圖來獲取日期的工作周。 這種方法沒有 DATES 表的缺點,但會帶來移植成本。 查詢的結構需要更改(刪除連接和添加函數),這需要更多的工作並且需要了解原始查詢。 不幸的是,在移植數據庫時,時間、工作和理解往往是供不應求的,這就是為什么 DATES 表方法經常被視為技術債務並永遠存在的原因。

我假設這個端口本質上很大,如果是這樣,我的建議是 - 為利益相關者制定這些權衡。 如果他們不能花時間轉換查詢(可能)建議使用 DATES 表方法,但要清楚地記錄技術債務以及功能將中斷的“結束日期”。 我會選擇一個比較接近的日期,比如 2025 年,這樣就需要對長期計划采取一些行動。 記錄何時需要采取行動的觸發器。

這不會是像這樣的港口出現的這些“技術債務”問題中的第一個。 有太多地方“把它做好”會勝過“把它做好”。 您甚至還沒有觸及性能問題的表面——隨着時間的推移,這些是非常不同的數據庫和數據解決方案,因為 Teradata 無法在基於簡單端口的 Redshift 上實現最佳性能。 這不是“全部丟失”級別的問題。 只需記錄選擇以及這些選擇的長期影響。 為何時需要跟進“優化”工作的“端口”的各個方面定義觸發器(日期或性能度量)。 管理層喜歡忘記跟進這些工作的必要性,因此將這些記錄在案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM