本文說明如何設定跨雲端 Lakehouse,直接在Google Cloud中查詢 Databricks Unity Catalog 目錄的資料。這項功能可整合外部資料來源與現有Google Cloud 環境,統一資料分析作業。
之後,您可以使用 Lakehouse for Apache Iceberg 管理同盟資料的存取權。
事前準備
- 請參閱資料湖倉總覽,瞭解資料湖倉如何管理資料存取權。
- 請參閱「關於跨雲端 Lakehouse」,瞭解運作方式。
- 請參閱支援的目錄,確認外部位置資訊需求和支援的設定。
- 瞭解如何使用區域性 Secret Manager 密鑰。如要使用 Databricks Unity Catalog 設定跨雲端 Lakehouse,就必須執行這項操作。
- 在遠端目錄供應商中產生 OAuth 服務主體 (用戶端 ID 和用戶端密鑰),該主體必須具備目標目錄的讀取權限。這個程序不在本文的討論範圍內。
- 選用:如果您打算透過 Google Cloud 虛擬私有雲和遠端雲端供應商虛擬私有雲 (例如 AWS) 之間的私有互連網路,傳送查詢,請確保您在遠端供應商擁有有效帳戶、佈建 Cross-Cloud Interconnect 或 Partner Interconnect、與 Cloud Router 建立 BGP 工作階段,並確認您在兩個雲端環境中都具備必要的 IAM 權限。
- 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake, Secret Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake, Secret Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
必要的角色
如要取得設定跨雲端 Lakehouse 所需的權限,請要求管理員授予您專案的下列 IAM 角色:
-
管理 Lakehouse 目錄:
BigLake 管理員 (
roles/biglake.admin) -
管理密鑰:
Secret Manager 管理員 (
roles/secretmanager.admin) -
透過私有互連傳送流量:
Compute 網路管理員 (
roles/compute.networkAdmin)、Service Directory 檢視者 (roles/servicedirectory.viewer) 和 Service Directory PSC 授權服務 (roles/servicedirectory.pscAuthorizedService)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
支援的目錄詳細資料
本指南提供相關操作說明,協助您在 Amazon Web Services (AWS) 或 Google Cloud上,使用 Databricks Unity Catalog 目錄設定跨雲端 Lakehouse。如要進一步瞭解外部位置需求和支援的設定,請參閱「支援的目錄」。
限制和注意事項
本節列出使用跨雲端 Lakehouse 的限制和注意事項。
- 支援的雲端供應商:使用私有互連與跨雲端 Lakehouse 互連,支援的遠端雲端供應商包括 Amazon Web Services (AWS)。您可以選擇使用Cross-Cloud Interconnect或Partner Interconnect。
- 系統僅支援使用 AWS 外部位置或 Google Cloud外部位置的 Databricks Unity 目錄。AWS 預設儲存空間或 Google Cloud預設儲存空間的 Unity Catalog 目錄不支援。
- 您必須在 Unity Catalog 使用的 Metastore 上啟用外部資料存取權,這項功能預設為停用。
- 網路轉送:如果未設定私人互連網路 (例如客戶擁有的 CCI 或 Partner Interconnect),查詢會透過公用網際網路轉送。這可能會導致遠端雲端供應商收取較高的輸出費用,且效能較難預測。
- 資料更新間隔:聯合目錄的
--refresh-interval標記會決定中繼資料的同步頻率。間隔越短,資料越新,但可能產生額外的遠端目錄供應商 API 費用。 Iceberg 指標回報: Iceberg 指標回報不適用於聯邦目錄。存取聯邦目錄時,請在 Iceberg 用戶端中將
rest-metrics-reporting-enabled屬性設為false。
一般工作流程
如要設定及使用跨雲端 Lakehouse,請按照下列一般步驟操作:
- 設定跨雲端互連 (選用):設定 Google Cloud VPC 與遠端雲端供應商之間的私人連線。
- 設定同盟:在 Secret Manager 中建立密鑰,並提供遠端目錄憑證。接著,在 Lakehouse 中建立同盟目錄,並授予該目錄密鑰存取權。
- 驗證連線:確認 Lakehouse 能順利連線至遠端目錄。
- 查詢資料:使用 BigQuery 或 Managed Service for Apache Spark,對聯合資料執行查詢。詳情請參閱「使用跨雲端 Lakehouse」。
- 設定權限:使用 Identity and Access Management (IAM) 管理可查看及查詢同盟資料的使用者。
設定 Cross-Cloud Interconnect (選用)
根據預設,對遠端目錄的查詢會透過公開網際網路傳輸。為協助提升安全性及法規遵循能力、提供可預測的效能,以及降低資料傳輸費用,請使用私有互連。這會在您的 Google Cloud虛擬私有雲 (VPC) 與遠端雲端供應商的網路 (例如 AWS) 之間,建立專屬的私人網路連線。
您可以在 Google Cloud 虛擬私有雲和遠端雲端供應商的虛擬私有雲 (例如 AWS) 之間,佈建及設定下列任一私人互連選項:
- Cross-Cloud Interconnect:專屬實體連線。
- Partner Interconnect:透過支援的服務供應商建立連線。
在 Cloud Router Google Cloud 和遠端雲端供應商的 VPC 之間建立 BGP 工作階段,確保路徑交換。
如要啟用私人查詢,您必須透過私人互連,設定從 Lakehouse 到遠端儲存空間 bucket (例如 AWS Amazon S3 bucket) 的路徑。您可以按照下列兩種架構流程設定這項路徑:
- 內部區域 Proxy 網路負載平衡器轉送:這個流程會使用Google Cloud 內部區域 Proxy 網路負載平衡器,將要求分配至指向多個 AWS 彈性網路介面 (ENI) 的混合式連線網路端點群組 (NEG)。這個流程對於負載平衡、擴充性和高可用性至關重要。合作夥伴互連網路必須使用 Cloud Router,而 Cross-Cloud Interconnect 則建議使用,以利負載平衡、擴充性和高可用性。
- 直接端點路由:這個流程會將 Service Directory 直接連至單一 AWS 介面 VPC 端點 IP 位址。這個流程僅適用於 Cross-Cloud Interconnect,不支援 Partner Interconnect。
選取符合架構需求的設定流程:
內部區域 Proxy 網路負載平衡器
如要設定內部區域 Proxy 網路負載平衡器,將要求分配到多個 AWS ENI,以達到高可用性和負載平衡,請按照下列步驟操作:
設定 AWS 網路
首先,請建立 Amazon S3 虛擬私有雲介面端點 (AWS PrivateLink):
- 在 AWS VPC 控制台中,為 Amazon S3 建立介面端點。
- 指定服務名稱為
com.amazonaws.<var>AWS_REGION</var>.s3。 - 選取透過 Direct Connect 連線至 Google Cloud VPC 的 VPC 和子網路。
- 將安全性群組附加至端點,控管連入存取權。
- 這會在每個選取的子網路中佈建彈性網路介面 (ENI)。請記下這些 ENI 的私人 IP 位址。
接著,請設定安全群組:
- 確認附加至 Amazon S3 端點 ENI 的安全性群組允許從 VPC 的相關 IP 範圍,在通訊埠
443上輸入 TCP 流量。 Google Cloud
設定 Google Cloud 網路
按照操作說明為混合式端點設定內部區域 Proxy 網路負載平衡器。
按照指示操作時,請務必執行下列步驟:
- 建立混合式連線 NEG (
NON_GCP_PRIVATE_IP_PORT),並新增您先前建立的 AWS ENI 私人 IP 位址。 - 為 NEG、健康狀態檢查和轉送規則使用 TCP 通訊埠
443。 - 在與同盟目錄相同的 Google Cloud 區域中設定負載平衡器。
為負載平衡器建立轉送規則後,請記下指派給負載平衡器的內部 IP 位址。這是你的
ILB_IP_ADDRESS。
設定 Service Directory
在 Service Directory 中註冊 ILB 的 IP 位址,讓 Lakehouse 能夠探索該位址。
為遠端雲端建立命名空間:
gcloud service-directory namespaces create NAMESPACE \ --project=PROJECT_ID \ --location=REGION
更改下列內容:
NAMESPACE:命名空間的專屬 ID。PROJECT_ID:您的 Google Cloud 專案 ID。REGION: Google Cloud 區域。例如us-east4。這必須與同盟目錄位於相同區域。
在 Service Directory 命名空間中建立服務:
gcloud service-directory services create SERVICE_NAME \ --namespace=NAMESPACE \ --project=PROJECT_ID \ --location=REGION
更改下列內容:
SERVICE_NAME:服務的專屬 ID。
在服務中建立 ILB 的端點:
gcloud service-directory endpoints create ENDPOINT_NAME \ --project=PROJECT_ID \ --namespace=NAMESPACE \ --service=SERVICE_NAME \ --location=REGION \ --network=projects/PROJECT_NUMBER/global/networks/VPC_NETWORK \ --address=ILB_IP_ADDRESS \ --port=443
更改下列內容:
ENDPOINT_NAME:端點的專屬 ID。PROJECT_NUMBER:您的 Google Cloud專案編號。請在--network旗標中使用專案編號。ILB_IP_ADDRESS:ILB 轉送規則的內部 IP 位址。
直接端點
如要設定 Service Directory,將流量直接轉送至單一 AWS 介面 VPC 端點 IP 位址,請按照下列步驟操作:
- 在 AWS 虛擬私有雲中,為 Amazon S3 建立介面虛擬私有雲端點。請記下這個端點的 IP 位址和通訊埠。
為遠端雲端建立命名空間:
gcloud service-directory namespaces create NAMESPACE \ --project=PROJECT_ID \ --location=REGION
更改下列內容:
NAMESPACE:命名空間的專屬 ID。PROJECT_ID:您的 Google Cloud 專案 ID。REGION: Google Cloud 區域。例如us-east4。這必須與同盟目錄位於相同區域。
在 Service Directory 命名空間中建立服務:
gcloud service-directory services create SERVICE_NAME \ --namespace=NAMESPACE \ --project=PROJECT_ID \ --location=REGION
更改下列內容:
SERVICE_NAME:服務的專屬 ID。
在服務中建立端點,內含 Amazon S3 介面 VPC 端點的路徑資訊:
gcloud service-directory endpoints create ENDPOINT_NAME \ --service=SERVICE_NAME \ --namespace=NAMESPACE \ --project=PROJECT_ID \ --location=REGION \ --address=S3_VPCE_IP_ADDRESS \ --port=S3_VPCE_PORT \ --network=projects/PROJECT_NUMBER/global/networks/VPC_NETWORK
更改下列內容:
ENDPOINT_NAME:端點的專屬 ID。S3_VPCE_IP_ADDRESS:Amazon S3 介面 VPC 端點的 IP 位址。例如:10.0.1.45。S3_VPCE_PORT:Amazon S3 介面 VPC 端點的通訊埠編號。例如:443。PROJECT_NUMBER:您的 Google Cloud專案編號。請在--network旗標中使用專案編號。VPC_NETWORK:與私有互連相關聯的虛擬私有雲網路名稱。 Google Cloud
設定聯盟
如要查詢資料,您必須設定 Lakehouse 聯合目錄,並連結至遠端目錄。
建立區域性密鑰
如要使用同盟功能,必須提供存取遠端目錄的憑證。 Lakehouse 會使用區域性 Secret Manager 密鑰,安全地儲存及擷取這些憑證,以便向遠端供應商驗證。
如果是 Databricks,您必須在 Databricks 帳戶中建立服務主體,並產生 OAuth 用戶端 ID 和用戶端密鑰。請確認這個服務主體具有目標 Unity Catalog 目錄的讀取權限。接著,請將這些憑證格式化為 JSON 酬載,並儲存在 Secret Manager 中。
建立名為
credentials.json的 JSON 檔案,其中包含您的酬載:{ "client_id": "CLIENT_ID", "client_secret": "CLIENT_SECRET" }
更改下列內容:
CLIENT_ID:Databricks 服務主體的 OAuth 用戶端 ID。CLIENT_SECRET:Databricks 服務主體的 OAuth 用戶端密鑰。
設定 Secret Manager 的區域端點:
Secret Manager 預設會使用全域端點。不過,跨雲端 Lakehouse 必須將密鑰儲存在與 Lakehouse 目錄相同的區域。如要使用
gcloudCLI 與區域性密鑰互動,您必須覆寫目前工作階段或設定檔的預設 API 端點。為避免連線問題,你的密鑰和目錄必須在相同區域建立。例如:secretmanager.us-east4.rep.googleapis.com。gcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/
更改下列內容:
REGION:儲存 Secret Manager 密鑰的 Google Cloud 區域。例如:us-east4。 為避免連線能力問題,您的 Secret 和目錄必須在同一區域建立。例如secretmanager.us-east4.rep.googleapis.com。
將酬載上傳至 Secret Manager:
gcloud secrets create DATABRICKS_SECRET_NAME \ --location="REGION" \ --project="PROJECT_ID" \ --data-file=credentials.json
更改下列內容:
DATABRICKS_SECRET_NAME:Databricks 密鑰的名稱。
建立聯合目錄
使用 gcloud biglake iceberg catalogs
create 指令建立聯邦目錄。
控制台
前往 Google Cloud 控制台的「Lakehouse」Lakehouse。
按一下 「建立目錄」。
按一下「聯合目錄」。
系統會顯示「目錄設定」詳細資料。
在「聯合目錄來源」中,選取「Unity (Databricks)」。
針對「Data location」(資料位置),選取要建立聯邦目錄的 Lakehouse 區域。例如:
us-east4。如要盡可能縮短延遲時間 (即使透過公用網際網路),請在選取區域時採取下列做法:- 如果 Unity Catalog 目錄位於 AWS,請選取最靠近 AWS 區域的Google Cloud 區域。
- 如果 Unity Catalog 目錄已開啟 Google Cloud,請選取完全相同的區域。
按一下「繼續」。
系統會顯示「連線詳細資料」。
在「Remote catalog details」(遠端目錄詳細資料) 部分的「Unity instance name」(Unity 執行個體名稱) 欄位中,輸入目標 Databricks 執行個體名稱。例如:
abcd.cloud.databricks.com。在「Unity catalog name」(Unity Catalog 名稱) 欄位中,輸入要聯合的目標 Databricks Unity Catalog 目錄名稱。
在「Authentication and network」(驗證和網路) 部分的「Secret」(密鑰) 欄位中,輸入 Databricks 密鑰的名稱。請使用下列格式:
projects/PROJECT_ID/locations/REGION/secrets/DATABRICKS_SECRET_NAME。選用:在「Service directory name」(服務目錄名稱) 欄位中,輸入 Service Directory 服務的路徑。例如:
projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME。只有在設定 Cross-Cloud Interconnect 時,才需要執行這項操作。點選「建立」。
gcloud CLI
公開網際網路 (無 CCI)
如未設定 CCI,連線會透過公開網際網路安全傳輸。
gcloud biglake iceberg catalogs create FEDERATED_CATALOG_NAME \ --project="PROJECT_ID" \ --primary-location="REGION" \ --catalog-type="federated" \ --federated-catalog-type="unity" \ --secret-name="projects/PROJECT_ID/locations/REGION/secrets/DATABRICKS_SECRET_NAME" \ --unity-instance-name="UNITY_INSTANCE_NAME" \ --unity-catalog-name="UNITY_CATALOG_NAME" \ --refresh-interval="REFRESH_INTERVAL" \ --namespace-filters="NAMESPACE_FILTERS"
更改下列內容:
PROJECT_ID:您的 Google Cloud 專案 ID。REGION:建立聯合目錄的 Lakehouse 區域。例如,us-east4。如要盡量縮短延遲時間,請在選取區域時採取下列做法:- 如果 Unity Catalog 目錄位於 AWS,請選取最靠近 AWS 區域的Google Cloud 區域。
- 如果 Unity Catalog 目錄已開啟 Google Cloud,請選取完全相同的區域。
DATABRICKS_SECRET_NAME:Databricks Secret 的名稱。UNITY_INSTANCE_NAME:目標 Databricks 執行個體名稱。例如:abcd.cloud.databricks.com。UNITY_CATALOG_NAME:要聯合的目標 Databricks Unity Catalog 目錄名稱。REFRESH_INTERVAL:指定更新目錄資訊的頻率。請將這個值設為時間長度,例如330s或5m30s。間隔時間越短,更新資料的頻率就越高,但 API 呼叫的費用也可能越高。間隔時間越長,費用就越低,但查詢到的資料可能無法反映最新的資料集。如果省略這個值或將值設為0s,系統就會停用更新。NAMESPACE_FILTERS:選用:以半形逗號分隔的命名空間清單,用於同盟。例如,ns1,ns2。如省略,則會納入所有命名空間。
客戶擁有的帳戶 (CCI)
如果您設定了私人互連網路 (例如專屬 CCI 或 Partner Interconnect),請提供 Service Directory 服務參照,讓 Lakehouse 私下轉送流量。
gcloud biglake iceberg catalogs create FEDERATED_CATALOG_NAME \ --project="PROJECT_ID" \ --primary-location="REGION" \ --catalog-type="federated" \ --federated-catalog-type="unity" \ --secret-name="projects/PROJECT_ID/locations/REGION/secrets/DATABRICKS_SECRET_NAME" \ --unity-instance-name="UNITY_INSTANCE_NAME" \ --unity-catalog-name="UNITY_CATALOG_NAME" \ --refresh-interval="REFRESH_INTERVAL" \ --namespace-filters="NAMESPACE_FILTERS" \ --service-directory-name="projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME"
更改下列內容:
PROJECT_ID:您的 Google Cloud 專案 ID。PROJECT_NUMBER:您的 Google Cloud 專案編號。REGION:建立聯合目錄的 Lakehouse 區域。例如,us-east4。如要盡量縮短延遲時間,請在選取區域時採取下列做法:- 如果 Unity Catalog 目錄位於 AWS,請選取最靠近 AWS 區域的Google Cloud 區域。
- 如果 Unity Catalog 目錄已開啟 Google Cloud,請選取完全相同的區域。注意:這必須與 Service Directory 命名空間和區域密鑰位於相同區域。
DATABRICKS_SECRET_NAME:Databricks Secret 的名稱。UNITY_INSTANCE_NAME:目標 Databricks 執行個體名稱。例如:abcd.cloud.databricks.com。UNITY_CATALOG_NAME:要聯合的目標 Databricks Unity Catalog 目錄名稱。REFRESH_INTERVAL:指定更新目錄資訊的頻率。請將這個值設為時間長度,例如330s或5m30s。間隔時間越短,更新資料的頻率就越高,但 API 呼叫的費用也可能越高。間隔時間越長,費用就越低,但查詢到的資料可能無法反映最新的資料集。如果省略這個值或將值設為0s,系統就會停用更新。NAMESPACE_FILTERS:選用:以半形逗號分隔的命名空間清單,用於同盟。例如,ns1,ns2。如省略,則會納入所有命名空間。NAMESPACE:您在設定私人互連時建立的 Service Directory 命名空間。SERVICE_NAME:您在設定私人互連時建立的 Service Directory 服務名稱。
授予聯合目錄密鑰存取權
建立目錄時,Lakehouse 會為目錄佈建專屬服務帳戶 (在資源說明中以 biglake-service-account 形式傳回)。
您必須授予這個服務帳戶權限,才能存取本教學課程稍早建立的密鑰。請注意,傳播 IAM 政策可能需要幾分鐘。
授予目錄的服務帳戶密鑰存取權。
# Required to use regional secrets gcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/ gcloud secrets add-iam-policy-binding DATABRICKS_SECRET_NAME \ --project="PROJECT_ID" \ --location="REGION" \ --member="serviceAccount:$(gcloud biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \ --project="PROJECT_ID" \ --location="REGION" \ --format='value(biglake-service-account)')" \ --role="roles/secretmanager.secretAccessor"
驗證連線
如要確認聯盟目錄服務帳戶是否可存取密鑰,請執行下列指令:
# Required to use regional secrets gcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/ gcloud secrets get-iam-policy DATABRICKS_SECRET_NAME \ --project="PROJECT_ID" \ --location="REGION"
在輸出內容中,確認 biglake-service-account 服務帳戶已獲派 roles/secretmanager.secretAccessor 角色。
接著,請確認目錄背景重新整理週期已順利完成,且命名空間正在同步處理。
確認重新整理狀態顯示成功:
gcloud biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \ --project="PROJECT_ID" \ --location="REGION"
確認遠端資料庫顯示為已同步的命名空間:
gcloud biglake iceberg namespaces list \ --catalog="FEDERATED_CATALOG_NAME" \ --project="PROJECT_ID" \ --location="REGION"