共用方式為


在 Google BigQuery 上執行同盟查詢

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

若要使用 Lakehouse 同盟連線到 BigQuery 資料庫,您必須在 Azure Databricks Unity Catalog 中繼存放區中建立下列專案:

  • 與 BigQuery 資料庫的連線
  • 在 Unity catalog 中鏡像 BigQuery 資料庫的 ,讓您可以使用 Unity Catalog 查詢語法和數據管理工具,來管理使用者對 Azure Databricks 資料庫的存取權。

開始之前

工作區需求:

  • 針對 Unity Catalog啟用工作區。

計算需求:

  • 從 Databricks Runtime 叢集或 SQL 倉儲到目標資料庫系統的網路連線。 請參閱 Lakehouse 同盟的網路建議
  • Azure Databricks 叢集必須使用 Databricks Runtime 16.1 或更新版本,以及共用或單一使用者存取模式。
  • SQL 倉儲必須是 Pro 或無伺服器。

所需的權限:

  • 若要建立連線,您必須是中繼存放區系統管理員或具有附加至工作區之 Unity CREATE CONNECTION 中繼存放區 Catalog 許可權的使用者。
  • 若要建立外部 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. Google BigQuery 連線類型,然後按一下 [下一步]

  5. 在 [驗證] 頁面上,輸入 BigQuery 實例的 Google 服務帳戶密鑰 json

    這是用來指定 BigQuery 專案並提供驗證的原始 JSON 物件。 您可以 generate 此 JSON 物件,並從 Google Cloud 中的 [金鑰] 底下的服務帳戶詳細數據頁面下載。 服務帳戶必須具有 BigQuery 中授與的適當權限,包括 BigQuery 使用者和 BigQuery 資料檢視器。 以下是一個範例。

    {
      "type": "service_account",
      "project_id": "PROJECT_ID",
      "private_key_id": "KEY_ID",
      "private_key": "PRIVATE_KEY",
      "client_email": "SERVICE_ACCOUNT_EMAIL",
      "client_id": "CLIENT_ID",
      "auth_uri": "https://accounts.google.com/o/oauth2/auth",
      "token_uri": "https://accounts.google.com/o/oauth2/token",
      "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
      "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/SERVICE_ACCOUNT_EMAIL",
      "universe_domain": "googleapis.com"
    }
    
  6. (選擇性)為您的 BigQuery 實例輸入項目識別碼

    這是 BigQuery 專案的名稱,用於針對在此連線下執行的所有查詢計費。 預設為服務帳戶的專案識別碼。

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

  8. 點選 「建立連線」

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

  10. (選擇性)點擊 [測試連線] 以確認它是否正常運作。

  11. 按兩下 [建立 catalog]。

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

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

  14. Grant 在 catalog上的許可權。 按一下 Grant:

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

  16. 在 [元數據] 頁面上,指定受控標記索引鍵/值組。

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

  18. 點選 儲存

SQL

在筆記本或 Databricks SQL 查詢編輯器中,執行下列命令。 將 <GoogleServiceAccountKeyJson> 取代為指定 BigQuery 專案並提供驗證的原始 JSON 物件。 您可以 generate 此 JSON 物件,並從 Google Cloud 中的 [金鑰] 底下的服務帳戶詳細數據頁面下載。 服務帳戶需要具有 BigQuery 中授與的適當權限,包括 BigQuery 使用者和 BigQuery 資料檢視器。 如需範例 JSON 物件,請檢視此頁面上 Catalog Explorer 索引標籤。

CREATE CONNECTION <connection-name> TYPE bigquery
OPTIONS (
  GoogleServiceAccountKeyJson '<GoogleServiceAccountKeyJson>'
);

建議您使用 Azure Databricks 秘密值,而不是純文本字串來處理 values 等敏感資料,例如 credentials。 例如:

CREATE CONNECTION <connection-name> TYPE bigquery
OPTIONS (
  GoogleServiceAccountKeyJson secret ('<secret-scope>','<secret-key-user>')
)

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

建立外部 catalog

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

若要建立外部 catalog,您可以在 Azure Databricks 筆記本或 Databricks SQL 查詢編輯器中使用 Catalog Explorer 或 CREATE FOREIGN CATALOG。 如果您使用UI來建立數據源的連線,則會包含外部 catalog 建立,而且您可以略過此步驟。

注意

您也可以使用 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. (選擇性)輸入下列 catalog 屬性:

    數據項目標識碼:BigQuery 專案的名稱,其中包含將對應至此 catalog的數據。 默認為連線層級的計費專案標識碼 set。

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

SQL

在筆記本或 Databricks SQL 編輯器中,執行下列 SQL 命令。 括弧中的項目是選擇性的。 取代占位符 values。

  • <catalog-name>:Azure Databricks 中 catalog 的名稱。
  • <connection-name>:指定數據源、路徑和存取 的 credentials。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>;

支援的下推

支援下列下推:

  • 篩選
  • 投影
  • Limit
  • 函式:部分,僅適用於篩選條件運算式。 (字串函式、數學函式、資料、時間和時間戳函式,以及其他其他函式,例如 Alias、Cast、SortOrder)
  • 彙總
  • 當與 limit 搭配使用時進行排序
  • 聯結 (Databricks Runtime 16.1 或更新版本)

不支援下列下推:

  • 視窗函式

資料類型對應

下列 table 顯示 BigQuery 與 Spark 數據類型的對應。

BigQuery 類型 Spark 類型
bignumeric、numeric DecimalType
int64 LongType
float64 DoubleType
陣列、地理、間隔、json、字串、結構 VarcharType
bytes BinaryType
bool BooleanType
date DateType
日期時間、時間、時間戳記 TimestampType/TimestampNTZType

如果 Timestamp (預設值),當您從 BigQuery 讀取時,BigQuery TimestampType 會對應至 Spark preferTimestampNTZ = false。 如果 Timestamp,BigQuery TimestampNTZType 會對應至 preferTimestampNTZ = true