Membuat tabel eksternal BigLake untuk Delta Lake

BigLake memungkinkan Anda mengakses tabel Delta Lake dengan kontrol akses yang lebih terperinci. Delta Lake adalah format penyimpanan data tabulasi open source yang dikembangkan oleh Databricks yang mendukung tabel data berskala petabyte.

BigQuery mendukung fitur berikut dengan tabel Delta Lake:

  • Delegasi akses: Buat kueri data terstruktur di penyimpanan data eksternal dengan delegasi akses. Delegasi akses memisahkan akses ke tabel Delta Lake dari akses ke penyimpanan data pokok.
  • Kontrol akses terperinci: Terapkan keamanan terperinci di tingkat tabel, termasuk keamanan tingkat baris dan tingkat kolom. Untuk tabel Delta Lake berdasarkan Cloud Storage, Anda juga dapat menggunakan penyamaran data dinamis.
  • Evolusi skema: Perubahan skema dalam tabel Delta Lake terdeteksi secara otomatis. Perubahan pada skema ditampilkan di tabel BigQuery.

Tabel Delta Lake juga mendukung semua fitur BigLake saat Anda mengonfigurasinya sebagai tabel BigLake.

Sebelum memulai

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery Connection and BigQuery Reservation APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  4. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  5. Pastikan Anda memiliki set data BigQuery.

  6. Pastikan versi Google Cloud SDK Anda adalah 366.0.0 atau yang lebih baru:

    gcloud version
    

    Jika perlu, update Google Cloud SDK.

  7. Buat koneksi resource Cloud berdasarkan sumber data eksternal Anda, dan berikan koneksi tersebut akses ke Cloud Storage. Jika Anda tidak memiliki izin yang sesuai untuk membuat koneksi, minta administrator BigQuery untuk membuat koneksi dan membagikannya kepada Anda.

  8. Peran yang diperlukan

    Izin berikut diperlukan untuk membuat tabel Delta Lake:

    • bigquery.tables.create
    • bigquery.connections.delegate

    Peran Identity and Access Management bawaan Admin (roles/bigquery.admin) BigQuery mencakup izin ini.

    Jika Anda bukan akun utama dalam peran ini, minta administrator untuk memberi Anda izin ini atau membuatkan tabel Delta Lake.

    Selain itu, agar pengguna BigQuery dapat membuat kueri tabel, akun layanan yang terkait dengan koneksi harus memiliki izin dan akses berikut:

    • Peran BigQuery Viewer (roles/bigquery.viewer)
    • Peran BigQuery Connection User (roles/bigquery.connectionUser)
    • Akses ke bucket Cloud Storage yang berisi data tersebut

    Untuk mengetahui informasi selengkapnya tentang peran dan izin Identity and Access Management di BigQuery, lihat Peran dan izin yang telah ditetapkan.

    Membuat tabel dengan Delta Lake

    Untuk membuat tabel Delta Lake, ikuti langkah-langkah berikut.

    SQL

    Gunakan pernyataan CREATE EXTERNAL TABLE untuk membuat tabel Delta Lake:

    CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.DELTALAKE_TABLE_NAME`
    WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
    OPTIONS (
      format ="DELTA_LAKE",
      uris=['DELTA_TABLE_GCS_BASE_PATH']);
    

    Ganti nilai berikut:

    • PROJECT_ID: ID project tempat Anda ingin membuat tabel Delta Lake
    • DATASET: set data BigQuery yang akan berisi tabel Delta Lake
    • DELTALAKE_TABLE_NAME: nama tabel Delta Lake Anda
    • REGION: region yang berisi koneksi untuk membuat tabel Delta Lake—misalnya, us
    • CONNECTION_ID: ID koneksi—misalnya, myconnection

      Saat Anda melihat detail koneksi di konsol Google Cloud , ID koneksi adalah nilai di bagian terakhir dari ID koneksi yang sepenuhnya memenuhi syarat yang ditampilkan di ID Koneksi—misalnya, projects/myproject/locations/connection_location/connections/myconnection.

    • DELTA_TABLE_GCS_BASE_PATH: awalan tabel Delta Lake

    bq

    Di lingkungan command line, gunakan perintah bq mk untuk membuat tabel Delta Lake:

    bq mk --table --external_table_definition=DEFINITION_FILE PROJECT_ID:DATASET.DELTALAKE_TABLE_NAME
    

    Ganti nilai berikut:

    • DEFINITION_FILE: jalur ke file definisi tabel
    • PROJECT_ID: ID project tempat Anda ingin membuat tabel Delta Lake
    • DATASET: set data BigQuery yang akan berisi tabel Delta Lake
    • DELTALAKE_TABLE_NAME: nama tabel Delta Lake Anda

    REST

    Gunakan BigQuery API untuk membuat tabel Delta Lake dengan memanggil metode API tables.insert:

    REQUEST='{
      "autodetect": true,
      "externalDataConfiguration": {
      "sourceFormat": "DELTA_LAKE",
      "connectionId": "PROJECT_ID.REGION.CONNECTION_ID",
      "sourceUris": [
        "DELTA_TABLE_GCS_BASE_PATH"
      ],
     },
    "tableReference": {
    "tableId": "DELTALAKE_TABLE_NAME"
    }
    }'
    
    echo $REQUEST | curl -X POST -d @- -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)" https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET/tables?autodetect_schema=true
    

    Ganti nilai berikut:

    • PROJECT_ID: ID project tempat Anda ingin membuat tabel Delta Lake
    • REGION: region yang berisi koneksi untuk membuat tabel Delta Lake—misalnya, us
    • CONNECTION_ID: ID koneksi—misalnya, myconnection

      Saat Anda melihat detail koneksi di konsol Google Cloud , ID koneksi adalah nilai di bagian terakhir dari ID koneksi yang sepenuhnya memenuhi syarat yang ditampilkan di ID Koneksi—misalnya, projects/myproject/locations/connection_location/connections/myconnection.

    • DELTA_TABLE_GCS_BASE_PATH: awalan tabel Delta Lake

    • DELTALAKE_TABLE_NAME: nama tabel Delta Lake Anda

    • DATASET: set data BigQuery yang akan berisi tabel Delta Lake

    Saat Anda membuat tabel Delta Lake, awalan Delta Lake digunakan sebagai URI untuk tabel. Misalnya, untuk tabel yang memiliki log di bucket gs://bucket/warehouse/basictable/_delta_log, URI tabelnya adalah gs://bucket/warehouse/basictable. Saat Anda menjalankan kueri pada tabel Delta Lake, BigQuery membaca data di bawah awalan untuk mengidentifikasi versi tabel saat ini, lalu menghitung metadata dan file untuk tabel tersebut.

    Meskipun Anda dapat membuat tabel eksternal Delta Lake tanpa koneksi, hal ini tidak direkomendasikan karena alasan berikut:

    • Pengguna mungkin mengalami error ACCESS_DENIED saat mencoba mengakses file di Cloud Storage.
    • Fitur seperti kontrol akses terperinci hanya tersedia di tabel BigLake Delta Lake.

    Memperbarui tabel Delta Lake

    Untuk memperbarui (memuat ulang) skema tabel Delta Lake, ikuti langkah-langkah berikut.

    bq

    Di lingkungan command line, gunakan perintah bq update untuk memperbarui (memuat ulang) skema tabel Delta Lake:

    bq update --autodetect_schema PROJECT_ID:DATASET.DELTALAKE_TABLE_NAME
    

    Ganti nilai berikut:

    • PROJECT_ID: ID project tempat Anda ingin membuat tabel Delta Lake
    • DATASET: set data BigQuery yang akan berisi tabel Delta Lake
    • DELTALAKE_TABLE_NAME: nama tabel Delta Lake Anda

    REST

    Gunakan BigQuery API untuk memperbarui tabel Delta Lake dengan memanggil metode API tables.patch:

    REQUEST='{
      "externalDataConfiguration": {
        "sourceFormat": "DELTA_LAKE",
        "sourceUris": [
          "DELTA_TABLE_GCS_BASE_PATH"
        ],
        "connectionId": "PROJECT_ID.REGION.CONNECTION_ID",
        "autodetect": true
      }
    }'
    echo $REQUEST |curl -X PATCH -d @- -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)" https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET/tables/DELTALAKE_TABLE_NAME?autodetect_schema=true
    

    Ganti nilai berikut:

    • DELTA_TABLE_GCS_BASE_PATH: awalan tabel Delta Lake
    • PROJECT_ID: ID project tempat Anda ingin membuat tabel Delta Lake
    • REGION: region yang berisi koneksi untuk membuat tabel Delta Lake—misalnya, us
    • CONNECTION_ID: ID koneksi—misalnya, myconnection

      Saat Anda melihat detail koneksi di konsol Google Cloud , ID koneksi adalah nilai di bagian terakhir dari ID koneksi yang sepenuhnya memenuhi syarat yang ditampilkan di ID Koneksi—misalnya, projects/myproject/locations/connection_location/connections/myconnection.

    • DELTALAKE_TABLE_NAME: nama tabel Delta Lake Anda

    • DATASET: set data BigQuery yang akan berisi tabel Delta Lake

    Membuat kueri tabel Delta Lake

    Setelah membuat tabel BigLake Delta Lake, Anda dapat membuat kuerinya menggunakan sintaksis GoogleSQL, sama seperti tabel BigQuery standar. Contoh:

    SELECT field1, field2 FROM mydataset.my_cloud_storage_table;
    

    Untuk informasi selengkapnya, baca artikel Membuat kueri data Cloud Storage di tabel BigLake.

    Koneksi eksternal yang terkait dengan akun layanan digunakan untuk terhubung ke penyimpanan data. Karena akun layanan mengambil data dari penyimpanan data, pengguna hanya memerlukan akses ke tabel Delta Lake.

    Pemetaan data

    BigQuery mengonversi jenis data Delta Lake menjadi jenis data BigQuery seperti yang ditampilkan dalam tabel berikut:

    Delta Lake Type Jenis BigQuery
    boolean BOOL
    byte INT64
    int INT64
    long INT64
    float FLOAT64
    double FLOAT64
    Decimal(P/S) NUMERIC atau BIG_NUMERIC bergantung pada presisi
    date DATE
    time TIME
    timestamp (not partition column) TIMESTAMP
    timestamp (partition column) DATETIME
    string STRING
    binary BYTES
    array<Type> ARRAY<Type>
    struct STRUCT
    map<KeyType, ValueType> ARRAY<Struct<key KeyType, value ValueType>>

    Batasan

    Tabel Delta Lake memiliki batasan tabel BigLake dan juga batasan berikut:

    • Mendukung versi pembaca Delta Lake 3 dengan vektor penghapusan jalur relatif dan pemetaan kolom.
    • Tidak mendukung titik pemeriksaan Delta Lake V2.
    • Anda harus mencantumkan versi pembaca dalam file entri log terakhir. Misalnya, tabel baru harus menyertakan 00000..0.json.
    • Operasi pengambilan data perubahan (CDC) tidak didukung. Semua operasi CDC yang ada akan diabaikan.
    • Skema terdeteksi secara otomatis. Memodifikasi skema menggunakan BigQuery tidak didukung.
    • Nama kolom tabel harus mematuhi batasan nama kolom BigQuery.
    • Tampilan terwujud tidak didukung.
    • Read API tidak didukung untuk Delta Lake.

    Pemecahan masalah

    Bagian ini memberikan bantuan terkait tabel BigLake Delta Lake. Untuk bantuan umum lainnya terkait pemecahan masalah kueri BigQuery, lihat Memecahkan masalah kueri.

    Error waktu tunggu kueri dan resource

    Periksa direktori log (gs://bucket/warehouse/basictable/_delta_log) tabel Delta Lake dan cari file JSON dengan nomor versi yang lebih besar daripada titik pemeriksaan sebelumnya. Anda dapat memperoleh nomor versi dengan mencantumkan direktori atau memeriksa file _delta_log/_last_checkpoint. File JSON yang lebih besar dari 10 MiB dapat memperlambat perluasan tabel yang dapat menyebabkan masalah waktu tunggu dan resource. Untuk mengatasi masalah ini, gunakan perintah berikut untuk membuat titik pemeriksaan baru sehingga kueri melewati pembacaan file JSON:

      spark.sql("ALTER TABLE delta.`gs://bucket/mydeltatabledir` SET TBLPROPERTIES ('delta.checkpointInterval' = '1')");
    

    Pengguna kemudian dapat menggunakan perintah yang sama untuk mereset interval titik pemeriksaan ke nilai default 10 atau ke nilai yang menghindari lebih dari 50 MB file JSON di antara titik pemeriksaan.

    Nama kolom tidak valid

    Pastikan pemetaan kolom diaktifkan untuk tabel Delta Lake. Pemetaan kolom didukung dengan Reader versi 2 atau yang lebih baru. Untuk Reader versi 1, tetapkan 'delta.columnMapping.mode' ke 'name' menggunakan perintah berikut:

    spark.sql("ALTER TABLE delta.`gs://bucket/mydeltatabledir` SET TBLPROPERTIES ('delta.columnMapping.mode' = 'name', 'delta.minReaderVersion' = '3', 'delta.minWriterVersion' = '7')");
    

    Jika nama kolom yang tidak valid mematuhi batasan nama kolom fleksibel, hubungi Layanan Pelanggan Cloud atau biglake-help@google.com.

    Error akses ditolak

    Untuk mendiagnosis masalah pada tabel BigLake Delta Lake, periksa hal berikut:

    Performa

    Untuk meningkatkan performa kueri, coba langkah-langkah berikut:

    • Gunakan utilitas Delta Lake untuk memadatkan file data pokok dan menghapus file yang berlebihan, seperti data dan metadata.

    • Pastikan delta.checkpoint.writeStatsAsStruct disetel ke true.

    • Pastikan variabel yang sering digunakan dalam klausa predikat berada di kolom partisi.

    Set data besar (lebih dari 100 TB) mungkin memerlukan konfigurasi dan fitur tambahan. Jika langkah-langkah sebelumnya tidak menyelesaikan masalah Anda, pertimbangkan untuk menghubungi Customer Care atau biglake-help@google.com, terutama untuk set data yang lebih besar dari 100 TB.