在 Amazon Redshift 上執行同盟查詢
重要
這項功能處於公開預覽狀態。
本文說明如何設定 Lakehouse 同盟,在 Azure Databricks 未管理的 Amazon Redshift 數據上執行同盟查詢。 若要深入瞭解 Lakehouse 同盟,請參閱 什麼是 Lakehouse 同盟。
若要使用 Lakehouse 同盟連線到 Amazon Redshift 資料庫上的執行查詢,您必須在 Azure Databricks Unity 目錄中繼存放區中建立下列專案:
- 在 Amazon Redshift 資料庫上執行查詢的連線。
- 在 Unity 目錄中的 Amazon Redshift 資料庫上鏡像執行查詢的外部目錄 ,讓您可以使用 Unity 目錄查詢語法和數據控管工具來管理 Azure Databricks 使用者對資料庫的存取權。
開始之前
工作區需求:
- 已啟用 Unity 目錄的工作區。
計算需求:
- 從 Databricks 執行時間叢集或 SQL 倉儲到目標資料庫系統的網路連線。 請參閱 Lakehouse 同盟的網路建議。
- Azure Databricks 叢集必須使用 Databricks Runtime 13.3 LTS 或更新版本,以及共用或單一使用者存取模式。
- SQL 倉儲必須是 Pro 或無伺服器,且必須使用 2023.40 或更新版本。
所需的權限:
- 若要建立連線,您必須是中繼存放區管理員或具有
CREATE CONNECTION
附加至工作區之 Unity 目錄中繼存放區許可權的使用者。 - 若要建立外部目錄,您必須擁有
CREATE CATALOG
中繼存放區的許可權,而且必須是聯機的擁有者,或擁有CREATE FOREIGN CATALOG
連線的許可權。
後續每個以工作為基礎的區段會指定其他許可權需求。
建立連線
連接會指定用來存取外部資料庫系統的路徑和認證。 若要建立連線,您可以在 Azure Databricks 筆記本或 CREATE CONNECTION
Databricks SQL 查詢編輯器中使用目錄總管或 SQL 命令。
需要的許可權: 具有許可權的 CREATE CONNECTION
中繼存放區系統管理員或使用者。
目錄總管
在您的 Azure Databricks 工作區中,按兩下 [目錄]。
在 [目錄] 窗格頂端,單擊 [新增] 圖示,然後從功能表中選取 [新增聯機]。
或者,從 [快速存取] 頁面,按兩下 [外部數據] 按鈕,移至 [連線] >索引標籤,然後按兩下 [建立連線]。
輸入使用者易記 的連線名稱。
選取 Redshift 的 [連線類型]。
輸入 Redshift 實例的下列連線屬性。
- 主機:例如
redshift-demo.us-west-2.redshift.amazonaws.com
- 埠:例如
5439
- 使用者:例如
redshift_user
- 密碼:例如
password123
- 主機:例如
(選擇性)按兩下 [ 測試連線 ] 以確認其運作正常。
(選擇性)新增批注。
按一下 [建立]。
SQL
在筆記本或 Databricks SQL 查詢編輯器中執行下列命令。
CREATE CONNECTION <connection-name> TYPE redshift
OPTIONS (
host '<hostname>',
port '<port>',
user '<user>',
password '<password>'
);
建議您針對認證等敏感性值使用 Azure Databricks 秘密 ,而不是純文本字串。 例如:
CREATE CONNECTION <connection-name> TYPE redshift
OPTIONS (
host '<hostname>',
port '<port>',
user secret ('<secret-scope>','<secret-key-user>'),
password secret ('<secret-scope>','<secret-key-password>')
)
如需設定秘密的相關信息,請參閱 秘密管理。
建立外部目錄
外部目錄會鏡像外部數據系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity 目錄來查詢和管理該資料庫中數據的存取權。 若要建立外部目錄,您可以使用已定義的數據源連線。
若要建立外部目錄,您可以在 Azure Databricks 筆記本或 SQL 查詢編輯器中使用目錄總管或 CREATE FOREIGN CATALOG
SQL 命令。
必要許可權:CREATE CATALOG
中繼存放區的許可權,以及聯機的擁有權或CREATE FOREIGN CATALOG
連線的許可權。
目錄總管
在您的 Azure Databricks 工作區中,按兩下 [目錄] 以開啟 [目錄 總管]。
在 [目錄] 窗格頂端,按兩下 [新增] 圖示,然後從功能表中選取 [新增目錄]。
或者,從 [ 快速存取] 頁面按兩下 [ 目錄] 按鈕,然後按下 [ 建立目錄 ] 按鈕。
遵循在建立目錄中 建立外部目錄的指示。
SQL
在筆記本或 SQL 查詢編輯器中執行下列 SQL 命令。 括弧中的項目是選擇性專案。 取代佔位元值:
<catalog-name>
:Azure Databricks 中目錄的名稱。<connection-name>
:指定數據源、路徑和存取認證的連接物件。<database-name>
:您想要在 Azure Databricks 中鏡像為目錄的資料庫名稱。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');
支援的下推
支援下列下推:
- 篩選
- 投影
- 限制
- 聯結
- 匯總(Average、Count、Max、Min、StddevPop、StddevSamp、Sum、VarianceSamp)
- 函式(字串函式和其他函式,例如 Alias、Cast、SortOrder)
- 排序
不支援下列下推:
- Windows 函式
資料類型對應
當您從 Redshift 讀取至 Spark 時,資料類型會對應如下:
Redshift 類型 | Spark 類型 |
---|---|
numeric | DecimalType |
int2、int4 | IntegerType |
int8、 oid、 xid | LongType |
float4 | FloatType |
雙精確度, float8, money | DoubleType |
bpchar, char, character varying, name, super, text, tid, varchar | StringType |
bytea、geometry、varbyte | BinaryType |
bit、bool | BooleanType |
date | DateType |
tabstime, time, time with time zone, timetz, time without time zone, timestamp with time zone, timestamptz, timestamp without time zone* | TimestampType/TimestampNTZType |
*當您從 Redshift 讀取時,Redshift Timestamp
會對應至 Spark TimestampType
if infer_timestamp_ntz_type = false
(預設值)。 如果 infer_timestamp_ntz_type = true
,則 Redshift Timestamp
會對應至 TimestampNTZType
。