在 Google BigQuery 上執行同盟查詢
本文說明如何設定 Lakehouse 同盟,對 Azure Databricks 未管理的 BigQuery 數據執行同盟查詢。 若要深入了解 Lakehouse 同盟,請參閱什麼是 Lakehouse 同盟?。
若要使用 Lakehouse 同盟連線到 BigQuery 資料庫,您必須在 Azure Databricks Unity 目錄中繼存放區中建立下列專案:
- 與 BigQuery 資料庫的連線。
- 外部目錄,該目錄將 BigQuery 資料庫鏡像至 Unity Catalog,讓您可以使用 Unity Catalog 的查詢語法和資料治理工具來管理 Azure Databricks 使用者對資料庫的存取權。
開始之前
工作區需求:
- 已為 Unity Catalog 啟用了工作區。
計算需求:
- 從 Databricks Runtime 叢集或 SQL 倉儲到目標資料庫系統的網路連線。 請參閱 Lakehouse 同盟的網路建議。
- Azure Databricks 叢集必須使用 Databricks Runtime 16.1 或更新版本,以及共用或單一使用者存取模式。
- SQL 倉儲必須是 Pro 或無伺服器。
所需的權限:
- 若要建立連線,您必須是中繼存放區系統管理員,或是具有附加至工作區之 Unity 目錄中繼存放區
CREATE CONNECTION
許可權的使用者。 - 若要建立外來目錄,您必須具有中繼存放區的
CREATE CATALOG
許可權,並且必須是連線的擁有者或具有該連線的CREATE FOREIGN CATALOG
特權。
後續每個基於工作的章節中會指定其他權限需求。
建立連線
連接會指定用來存取外部資料庫系統的路徑和認證。 若要建立連線,您可以在 Azure Databricks 筆記本或 Databricks SQL 查詢編輯器中使用目錄總管或 CREATE CONNECTION
SQL 命令。
注意
您也可使用 Databricks REST API 或 Databricks CLI 來建立連線。 請參閱 的 POST /api/2.1/unity-catalog/connections,以及 的 Unity Catalog 命令。
需要的權限:具有 CREATE CONNECTION
權限的中繼存放區系統管理員或使用者。
目錄檢視器
在 Azure Databricks 工作區中,按一下
目錄。
在 [目錄] 窗格頂端,單擊
[新增] 圖標,然後從選單中選取 [新增連線 ]。
或者,從 [快速存取] 頁面,按兩下 [外部數據 >] 按鈕,移至 [連線] 索引卷標,然後按兩下 [建立連線]。
在 [連線基本資訊] 頁面的 [設定連線] 精靈中,輸入使用者易記的 [連線名稱]。
選擇 類型的 Google BigQuery,然後點擊 下一步。
在 [驗證] 頁面上,輸入 BigQuery 實例的 Google 服務帳戶密鑰 json。
這是用來指定 BigQuery 專案並提供驗證的原始 JSON 物件。 您可以產生此 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" }
(選擇性)為您的 BigQuery 實例輸入項目識別碼 :
這是 BigQuery 專案的名稱,用於針對在此連線下執行的所有查詢計費。 預設為服務帳戶的專案識別碼。 服務帳戶必須在 BigQuery 中為這個專案授與適當的許可權,包括 BigQuery 使用者。 此專案中可能會建立用於儲存 BigQuery 臨時表的其他數據集。
(選擇性) 新增註解。
點選 「建立連線」。
在 目錄基礎 頁面上,輸入外文目錄的名稱。 外部目錄會鏡像外部數據系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity 目錄來查詢和管理該資料庫中數據的存取權。
(選擇性)點擊 [測試連線] 以確認它是否正常運作。
點選 建立目錄。
在 [Access] 頁面上,選擇工作區以讓使用者能存取您建立的目錄。 您可以選取 [所有工作區都有存取權],或按一下 [分配至工作區],選取工作區,然後按一下 [指派]。
變更 負責人,使其能夠管理目錄中所有物件的存取權。 開始在文字框中輸入主體,然後按一下結果中傳回的主體。
將目錄中 的許可權授予
。 點擊 授與: - 指定 主體 誰可以存取目錄中的物件。 開始在文字框中輸入主體,然後按一下結果中傳回的主體。
- 請選擇 權限預設值,以賦予每個主體。 根據預設,所有帳戶用戶都會被授與
BROWSE
。- 從下拉功能表中選取 [數據讀取器],以授予目錄中物件的
read
權限。 - 從下拉功能表中選取 [數據編輯器],以授與目錄中物件的
read
和modify
許可權。 - 手動選取要授與的許可權。
- 從下拉功能表中選取 [數據讀取器],以授予目錄中物件的
- 按一下 授與。
點選 [下一步]。
在 [元數據] 頁面上,指定標籤鍵值對。 如需詳細資訊,請參閱 將標籤應用於 Unity Catalog 的可保護對象。
(選擇性) 新增註解。
點選 儲存。
SQL
在筆記本或 Databricks SQL 查詢編輯器中,執行下列命令。 將 <GoogleServiceAccountKeyJson>
取代為指定 BigQuery 專案並提供驗證的原始 JSON 物件。 您可以產生此 JSON 物件,並從 Google Cloud 中 [金鑰] 底下的 [服務帳戶詳細數據] 頁面下載。 服務帳戶需要具有 BigQuery 中授與的適當權限,包括 BigQuery 使用者和 BigQuery 資料檢視器。 如需範例 JSON 物件,請檢視此頁面上 目錄總管 索引標籤。
CREATE CONNECTION <connection-name> TYPE bigquery
OPTIONS (
GoogleServiceAccountKeyJson '<GoogleServiceAccountKeyJson>'
);
建議您使用 Azure Databricks 機密 來儲存認證等敏感資訊,而不是使用純文本字串。 例如:
CREATE CONNECTION <connection-name> TYPE bigquery
OPTIONS (
GoogleServiceAccountKeyJson secret ('<secret-scope>','<secret-key-user>')
)
如需設定祕密的相關資訊,請參閱祕密管理。
建立國外目錄
注意
如果您使用 UI 來建立與數據來源的連線,則會包括外來目錄的建立,而且您可以略過此步驟。
外部目錄會鏡像外部數據系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity 目錄來查詢和管理該資料庫中數據的存取權。 若要建立外部目錄,請使用已定義的數據源連線。
若要建立外部目錄,您可以在 Azure Databricks 筆記本或 Databricks SQL 查詢編輯器中使用目錄總管或 CREATE FOREIGN CATALOG
。 您也可以使用 Databricks REST API 或 Databricks CLI 來建立目錄。 請參閱 POST /api/2.1/unity-catalog/catalogs 或 Unity Catalog 命令。
必要權限:中繼存放區的 CREATE CATALOG
權限,以及連線的所有權或連線的 CREATE FOREIGN CATALOG
權限。
目錄檢視器
在 Azure Databricks 工作區中,按兩下
目錄,以開啟 [目錄總管]。
在 [
目錄 ] 窗格頂端,按一下[新增] 或 [加號] 圖示 [新增 ] 圖示,然後從選單中選取 [新增目錄]。 或者,從 [快速存取] 頁面,按一下 [目錄] 按鈕,然後按一下 [建立目錄] 按鈕。
(選擇性)輸入下列目錄屬性:
數據項目標識碼:BigQuery 專案的名稱,其中包含將對應至此目錄的數據。 默認為連線層級所設定的計費專案標識碼。
請遵循在 建立目錄中關於建立外國目錄的指示。
SQL
在筆記本或 Databricks SQL 編輯器中,執行下列 SQL 命令。 括弧中的項目是選擇性的。 替換占位符值。
-
<catalog-name>
:Azure Databricks 中目錄的名稱。 -
<connection-name>
:指定數據源、路徑和存取認證的 連接物件。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>;
支援的下推
支援下列下推:
- 篩選
- 投影
- 限制
- 函式:部分,僅適用於篩選條件運算式。 (字串函式、數學函式、資料、時間和時間戳函式,以及其他其他函式,例如 Alias、Cast、SortOrder)
- 彙總
- 排序,當與限制數量搭配使用時
- 聯結 (Databricks Runtime 16.1 或更新版本)
不支援下列下推:
- 視窗函式
資料類型對應
下表顯示 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
。