Criar um gráfico de propriedades entre nuvens em um lakehouse aberto e sem fronteiras
O tutorial a seguir mostra como criar um único gráfico do BigQuery que unifica silos de dados em duas nuvens diferentes usando um lakehouse aberto e sem fronteiras e endpoints de catálogo REST do Apache Iceberg sem mover dados.
Antes de começar
Antes de começar, configure seu ambiente e ative as APIs necessárias.
Defina seu projeto e região e ative as APIs:
export PROJECT_ID="your-gcp-project-id" export REGION="us-east4" gcloud config set project "$PROJECT_ID" gcloud services enable \ biglake.googleapis.com \ bigquery.googleapis.com \ secretmanager.googleapis.com \ storage.googleapis.comCrie um ambiente virtual do Python para o carregador:
python3 -m venv iceberg-venv source iceberg-venv/bin/activate pip install --quiet "pyiceberg[pyarrow]"
Criar o Google Cloud spoke
Configure um catálogo REST do Apache Iceberg aberto com suporte de um bucket do Cloud Storage e carregue três tabelas do Iceberg nele.
Crie o bucket e o catálogo:
export GCS_BUCKET="gs://${PROJECT_ID}-xcloud-lake" export GCS_CATALOG="gcs_lake" gcloud storage buckets create "$GCS_BUCKET" \ --project="$PROJECT_ID" \ --location="$REGION" gcloud biglake iceberg catalogs create "$GCS_CATALOG" \ --project="$PROJECT_ID" \ --catalog-type=biglake \ --primary-location="$REGION" \ --default-location="$GCS_BUCKET"Salve o script Python a seguir como
load_gcs.pypara inicializar as tabelas:import subprocess, pyarrow as pa from pyiceberg.catalog.rest import RestCatalog from pyiceberg.schema import Schema from pyiceberg.types import NestedField, StringType, LongType, DoubleType import os PROJECT = os.environ["PROJECT_ID"] CATALOG = os.environ["GCS_CATALOG"] TOKEN = subprocess.check_output( ["gcloud", "auth", "application-default", "print-access-token"], text=True ).strip() cat = RestCatalog( name=CATALOG, uri="https://biglake.googleapis.com/iceberg/v1/restcatalog", warehouse=f"bl://projects/{PROJECT}/catalogs/{CATALOG}", token=TOKEN, **{"header.x-goog-user-project": PROJECT, "header.X-Iceberg-Access-Delegation": "vended-credentials"}, ) cat.create_namespace_if_not_exists("retail") def mk(name, schema, table): ident = ("retail", name) try: cat.drop_table(ident) except Exception: pass t = cat.create_table(ident, schema=schema) t.append(