共用方式為


在 Amazon Redshift 上執行同盟查詢

本文說明如何 set up Lakehouse 同盟,在 Azure Databricks 未管理的 Amazon Redshift 數據上執行同盟查詢。 若要深入了解 Lakehouse 同盟,請參閱什麼是 Lakehouse 同盟?

若要使用 Lakehouse 同盟連線至 Amazon Redshift 資料庫上的執行查詢,您必須在 Azure Databricks Unity Catalog 中繼存放區中建立下列專案:

  • 在 Amazon Redshift 資料庫上執行查詢的連線。
  • 外部 catalog,可鏡像在 Unity Catalog 的 Amazon Redshift 資料庫上執行查詢,讓您可以使用 Unity Catalog 查詢語法和數據控管工具來管理 Azure Databricks 使用者對資料庫的存取權。

開始之前

工作區需求:

  • 針對 Unity Catalog啟用工作區。

計算需求:

  • 從計算資源到目標資料庫系統的網路連接。 請參閱 Lakehouse 同盟的網路建議
  • Azure Databricks 計算必須使用 Databricks Runtime 13.3 LTS 或更新版本,共用單一使用者 存取模式。
  • SQL 倉儲必須是專業或無伺服器,且必須使用 2023.40 或更新版本。

所需的權限:

  • 若要建立連線,您必須是中繼存放區的系統管理員,或是擁有附加至工作區的 Unity Catalog 中繼存放區之 CREATE CONNECTION 權限的使用者。
  • 要建立外部 catalog,您必須在中繼存放區具備 CREATE CATALOG 許可權,並且必須是連線的擁有者或具備連線的 CREATE FOREIGN CATALOG 權限。

後續每個基於工作的章節中會指定其他權限需求。

建立連線

連線指定了一條路徑和 credentials 來存取外部資料庫系統。 若要建立連線,您可以在 Azure Databricks 筆記本或 Databricks SQL 查詢編輯器中使用 Catalog Explorer 或 CREATE CONNECTION SQL 命令。

注意

您也可使用 Databricks REST API 或 Databricks CLI 來建立連線。 請參閱 POST /api/2.1/unity-catalog/connectionsUnity Catalog 命令

需要的權限:具有 CREATE CONNECTION 權限的中繼存放區系統管理員或使用者。

Catalog 探索者

  1. 在 Azure Databricks 工作區中,按兩下 Catalog 圖示Catalog

  2. 在 [Catalog] 窗格頂端,按兩下 [新增] 或 [加號] 圖示,[新增] 圖示,然後 select從功能表新增連線

    或者,從 [快速存取] 頁面,按兩下 [外部數據 >] 按鈕,移至 [Connections] 索引標籤,然後按兩下 [建立連線

  3. 在 [連線 詳細數據] 頁面的 [Set 連線 嚮導] 上,輸入便於使用者記憶的 連線名稱

  4. Select 連線類型Redshift

  5. (選擇性) 新增註解。

  6. 點選 [下一步]

  7. 在 [驗證] 頁面上,輸入 Redshift 實例的下列連線屬性。

    • 主機:例如 redshift-demo.us-west-2.redshift.amazonaws.com
    • :例如 5439
    • 使用者:例如 redshift_user
    • 密碼:例如 password123
  8. (選擇性) 停用 SSL 主機名驗證

  9. 點選 建立連線

  10. 在 [Catalog 基本] 頁面上輸入外來 catalog的名稱。 外部 catalog 會鏡像外部數據系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity Catalog查詢和管理該資料庫中數據的存取權。

  11. (選擇性)按兩下 [ 測試連線 ] 以確認其運作正常。

  12. 按 [建立 catalog]。

  13. 在 [Access] 頁面上,select 使用者可以存取您所建立 catalog 的工作區。 您可以 select讓所有工作區都有存取權,或按一下 [指派工作區],select 這些工作區,然後按一下 [指派]。

  14. 變更 的所有者,使其能夠管理 catalog中所有物件的存取。 開始在文字框中輸入主體,然後按一下傳回的結果中的主體。

  15. Grant 在 catalog上的 許可權。 請點擊 Grant

    1. 指定 主體 誰可以存取 catalog中的物件。 開始在文字框中輸入主體,然後按一下傳回的結果中的主體。
    2. Select 許可權預設grant 至每個主體。 根據預設,所有帳戶用戶都會被授與 BROWSE
      • 從下拉功能表中選擇 Select數據讀取器,以設定 catalog中的 grantread 物件許可權。
      • 從下拉功能表選擇 Select數據編輯器,然後對 grantreadmodify 設定 catalog中對象的許可權。
      • 手動將select的許可權賦予grant。
    3. 按兩下 [Grant]。
  16. 點選 [下一步]

  17. 在 [元數據] 頁面上,指定標籤的鍵值對。 如需詳細資訊,請參閱 將標籤套用至 Unity Catalog 安全性實體物件

  18. (選擇性) 新增註解。

  19. 點擊 儲存

SQL

在筆記本或 Databricks SQL 查詢編輯器中執行下列命令。

CREATE CONNECTION <connection-name> TYPE redshift
OPTIONS (
  host '<hostname>',
  port '<port>',
  user '<user>',
  password '<password>'
);

建議您使用 Azure Databricks 機密,而不是純文本字串,用於處理如 credentials類的敏感資訊 values。 例如:

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>')
)

如需設定祕密的相關資訊,請參閱祕密管理

建立外部 catalog

注意

如果您使用 UI 來建立資料來源的連線,則將自動包括 Foreign catalog 的建立,您可以略過此步驟。

外部 catalog 會鏡像外部數據系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity Catalog查詢和管理該資料庫中數據的存取權。 若要建立外部 catalog,您可以使用已定義的數據源連線。

若要創建外部的 catalog,您可以在 Azure Databricks 筆記本或 SQL 查詢編輯器中使用 Catalog Explorer 或 CREATE FOREIGN CATALOG SQL 命令。

您也可以使用 Databricks REST API 或 Databricks CLI 來建立 catalog。 請參閱 POST /api/2.1/unity-catalog/catalogsUnity Catalog 命令

必要權限:中繼存放區的 CREATE CATALOG 權限,以及連線的所有權或連線的 CREATE FOREIGN CATALOG 權限。

Catalog 探索者

  1. 在 Azure Databricks 工作區中,按兩下 [Catalog] 圖示Catalog 以開啟 Catalog Explorer。

  2. 在 [Catalog] 窗格頂端,單擊 [新增] 或 [加號] 圖示,[新增] 圖示,然後從功能表 select[新增 catalog]。

    或者,從 [快速存取] 頁面中,點擊 [Catalogs] 按鈕,然後點擊 [建立 catalog] 按鈕。

  3. 請遵循在 Create catalogs中建立外部 catalogs 的指示。

SQL

在筆記本或 SQL 查詢編輯器中,執行下列 SQL 命令。 括弧中的項目是選擇性的。 替換佔位符 values:

  • <catalog-name>:Azure Databricks 中 catalog 的名稱。
  • <connection-name>:指定數據源、路徑和存取 credentials的 連接物件
  • <database-name>:您想要在 Azure Databricks 中鏡像為 catalog 的資料庫名稱。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');

支援的下推

支援下列下推:

  • 篩選
  • 投影
  • Limit
  • 聯結
  • 匯總(Average、Count、Max、Min、StddevPop、StddevSamp、Sum、VarianceSamp)
  • 函式(字串函式和其他函式,例如 Alias、Cast、SortOrder)
  • 排序

不支援下列下推:

  • 視窗函式

資料類型對應

當您從 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 (預設值)。 如果 Timestamp,則 Redshift TimestampNTZType 會對應至 infer_timestamp_ntz_type = true