Transfer Penyimpanan Blob

Dengan konektor BigQuery Data Transfer Service untuk Azure Blob Storage, Anda dapat menjadwalkan dan mengelola tugas pemuatan berulang secara otomatis dari Blob Storage ke BigQuery.

Sebelum memulai

Sebelum Anda membuat transfer data Blob Storage, lakukan langkah berikut:

Izin yang diperlukan

Untuk membuat transfer data Penyimpanan Blob, Anda memerlukan izin Identity and Access Management (IAM) bigquery.transfers.update. Anda juga memerlukan izin bigquery.datasets.get dan bigquery.datasets.update pada set data target.

Peran IAM bigquery.admin yang telah ditentukan mencakup izin yang diperlukan untuk membuat transfer data Penyimpanan Blob.

Untuk mengetahui informasi selengkapnya tentang IAM BigQuery, lihat Kontrol akses dengan IAM.

Untuk memastikan bahwa Anda memiliki izin yang benar di Penyimpanan Blob untuk mengaktifkan transfer data, lihat Tanda tangan akses bersama (SAS).

Jika ingin menyiapkan notifikasi operasi transfer untuk Pub/Sub, Anda harus memiliki izin pubsub.topics.setIamPolicy. Izin Pub/Sub tidak hanya diperlukan untuk notifikasi email. Untuk mengetahui informasi selengkapnya, lihat Notifikasi operasi BigQuery Data Transfer Service.

Batasan

Transfer data Penyimpanan Blob tunduk pada batasan berikut:

Menyiapkan transfer data Penyimpanan Blob

Pilih salah satu opsi berikut:

Konsol

  1. Buka halaman Data transfers di konsol Google Cloud.

    Buka Data transfers

  2. Klik Create transfer.

  3. Di halaman Buat transfer, lakukan tindakan berikut:

    • Di bagian Source type, untuk Source, pilih Azure Blob Storage.

      Jenis sumber transfer

    • Di bagian Transfer config name, untuk Display name, masukkan nama untuk transfer data.

    • Di bagian Schedule options:

      • Pilih Repeat frequency. Jika memilih Jam, Hari, Minggu, atau Bulan, Anda juga harus menentukan frekuensinya. Anda juga dapat memilih Custom untuk menentukan frekuensi pengulangan kustom. Jika Anda memilih On-demand, transfer data ini akan berjalan saat Anda memicu transfer secara manual.

      • Jika berlaku, pilih Start now atau Start at set time dan masukkan tanggal mulai dan waktu proses.

    • Di bagian Setelan tujuan, untuk Set data, pilih set data yang Anda buat untuk menyimpan data.

    • Di bagian Detail sumber data, lakukan hal berikut:

      • Untuk Destination table, masukkan nama tabel yang Anda buat untuk menyimpan data di BigQuery. Nama tabel tujuan mendukung parameter.
      • Untuk Nama akun penyimpanan Azure, masukkan nama akun Penyimpanan Blob.
      • Untuk Nama container, masukkan nama container Penyimpanan Blob.
      • Untuk Jalur data, masukkan jalur untuk memfilter file yang akan ditransfer. Lihat contoh.
      • Untuk token SAS, masukkan token Azure SAS.
      • Untuk File format, pilih format data sumber.
      • Untuk Write disposition, pilih WRITE_APPEND untuk menambahkan data baru secara bertahap ke tabel tujuan, atau WRITE_TRUNCATE untuk menimpa data di tabel tujuan selama setiap transfer dijalankan. WRITE_APPEND adalah nilai default untuk Write disposition.

      Untuk mengetahui informasi selengkapnya tentang cara BigQuery Data Transfer Service menyerap data menggunakan WRITE_APPEND atau WRITE_TRUNCATE, lihat Penyerapan data untuk Transfer Azure Blob. Untuk mengetahui informasi selengkapnya tentang kolom writeDisposition, lihat JobConfigurationLoad.

      Data source details

    • Di bagian Opsi transfer, lakukan tindakan berikut:

      • Untuk Number of errors allowed, masukkan nilai bilangan bulat untuk jumlah maksimum data buruk yang dapat diabaikan. Nilai defaultnya adalah .
      • (Opsional) Untuk Jenis target desimal, masukkan daftar yang dipisahkan koma yang berisi kemungkinan jenis data SQL yang dapat dikonversi dari nilai desimal di data sumber. Jenis data SQL yang dipilih untuk konversi bergantung pada kondisi berikut:
        • Dalam urutan NUMERIC, BIGNUMERIC, dan STRING, jenis akan dipilih jika berada dalam daftar yang Anda tentukan dan jika mendukung presisi dan skala.
        • Jika tidak satu pun jenis data yang tercantum yang mendukung presisi dan skala tersebut, jenis data yang mendukung rentang terluas dalam daftar yang Anda tentukan akan dipilih. Jika nilai melebihi rentang yang didukung saat membaca data sumber, error akan ditampilkan.
        • Jenis data STRING mendukung semua nilai presisi dan skala.
        • Jika kolom ini dibiarkan kosong, jenis data akan ditetapkan secara default ke NUMERIC,STRING untuk ORC, dan NUMERIC untuk format file lainnya.
        • Kolom ini tidak boleh berisi jenis data duplikat.
        • Urutan jenis data yang Anda cantumkan akan diabaikan.
    • Jika Anda memilih CSV atau JSON sebagai format file, di bagian JSON, CSV, centang Abaikan nilai yang tidak diketahui untuk menerima baris yang berisi nilai yang tidak cocok dengan skema.

    • Jika Anda memilih CSV sebagai format file, di bagian CSV, masukkan opsi CSV tambahan untuk memuat data.

      Opsi CSV

    • Di bagian Opsi notifikasi, Anda dapat memilih untuk mengaktifkan notifikasi email dan notifikasi Pub/Sub.

      • Saat Anda mengaktifkan notifikasi email, administrator transfer akan menerima notifikasi email saat proses transfer gagal.
      • Saat mengaktifkan notifikasi Pub/Sub, pilih nama topik yang akan dipublikasikan atau klik Buat topik untuk membuatnya.
    • Jika Anda menggunakan CMEK, di bagian Advanced options, pilih Customer-managed key. Daftar CMEK yang tersedia akan muncul dan dapat Anda pilih. Untuk mengetahui informasi cara kerja CMEK dengan BigQuery Data Transfer Service, lihat Menentukan kunci enkripsi dengan transfer.

  4. Klik Simpan.

bq

Gunakan perintah bq mk --transfer_config untuk membuat transfer Penyimpanan Blob:

bq mk \
  --transfer_config \
  --project_id=PROJECT_ID \
  --data_source=DATA_SOURCE \
  --display_name=DISPLAY_NAME \
  --target_dataset=DATASET \
  --destination_kms_key=DESTINATION_KEY \
  --params=PARAMETERS

Ganti kode berikut:

  • PROJECT_ID: (Opsional) project ID yang berisi set data target Anda. Jika tidak ditentukan, project default Anda akan digunakan.
  • DATA_SOURCE: azure_blob_storage.
  • DISPLAY_NAME: nama tampilan untuk konfigurasi transfer data. Nama transfer dapat berupa nilai apa pun yang memungkinkan Anda mengidentifikasi transfer jika perlu mengubahnya nanti.
  • DATASET: set data target untuk konfigurasi transfer data.
  • DESTINATION_KEY: (Opsional) ID resource kunci Cloud KMS— misalnya, projects/project_name/locations/us/keyRings/key_ring_name/cryptoKeys/key_name.
  • PARAMETERS: parameter untuk konfigurasi transfer data, yang tercantum dalam format JSON. Contoh, --params={"param1":"value1", "param2":"value2"}. Berikut adalah parameter untuk transfer data Blob Storage:
    • destination_table_name_template: Wajib diisi. Nama tabel tujuan Anda.
    • storage_account: Wajib diisi. Nama akun Penyimpanan Blob.
    • container: Wajib diisi. Nama container Penyimpanan Blob.
    • data_path: Opsional. Jalur untuk memfilter file yang akan ditransfer. Lihat contoh
    • sas_token: Wajib diisi. Token Azure SAS.
    • file_format: Opsional. Jenis file yang ingin ditransfer: CSV, JSON, AVRO, PARQUET, atau ORC. Nilai defaultnya adalah CSV.
    • write_disposition: Opsional. Pilih WRITE_APPEND untuk menambahkan data ke tabel tujuan, atau WRITE_TRUNCATE untuk menimpa data di tabel tujuan. Nilai defaultnya adalah WRITE_APPEND.
    • max_bad_records: Opsional. Jumlah catatan buruk yang diizinkan. Nilai defaultnya adalah 0.
    • decimal_target_types: Opsional. Daftar yang dipisahkan koma yang berisi kemungkinan jenis data SQL yang dapat dikonversi dari nilai desimal di data sumber. Jika kolom ini tidak disediakan, jenis data akan ditetapkan secara default ke NUMERIC,STRING untuk ORC, dan NUMERIC untuk format file lainnya.
    • ignore_unknown_values: Opsional, dan diabaikan jika file_format bukan JSON atau CSV. Tetapkan ke true untuk menerima baris yang berisi nilai yang tidak cocok dengan skema.
    • field_delimiter: Opsional, dan hanya berlaku jika file_format adalah CSV. Karakter yang memisahkan kolom. Nilai defaultnya adalah ,.
    • skip_leading_rows: Opsional, dan hanya berlaku jika file_format adalah CSV. Menunjukkan jumlah baris header yang tidak ingin Anda impor. Nilai defaultnya adalah 0.
    • allow_quoted_newlines: Opsional, dan hanya berlaku jika file_format adalah CSV. Menunjukkan apakah akan mengizinkan baris baru dalam kolom yang dikutip atau tidak.
    • allow_jagged_rows: Opsional, dan hanya berlaku jika file_format adalah CSV. Menunjukkan apakah akan menerima baris yang tidak memiliki kolom opsional di akhir. Nilai-nilai yang tidak ada akan diisi dengan NULL.

Misalnya, kode berikut akan membuat transfer data Blob Storage yang disebut mytransfer:

bq mk \
  --transfer_config \
  --data_source=azure_blob_storage \
  --display_name=mytransfer \
  --target_dataset=mydataset \
  --destination_kms_key=projects/myproject/locations/us/keyRings/mykeyring/cryptoKeys/key1
  --params={"destination_table_name_template":"mytable",
      "storage_account":"myaccount",
      "container":"mycontainer",
      "data_path":"myfolder/*.csv",
      "sas_token":"my_sas_token_value",
      "file_format":"CSV",
      "max_bad_records":"1",
      "ignore_unknown_values":"true",
      "field_delimiter":"|",
      "skip_leading_rows":"1",
      "allow_quoted_newlines":"true",
      "allow_jagged_rows":"false"}

API

Gunakan metode projects.locations.transferConfigs.create dan berikan instance resource TransferConfig.

Java

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Java API.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.


import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.CreateTransferConfigRequest;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ProjectName;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.protobuf.Struct;
import com.google.protobuf.Value;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

// Sample to create azure blob storage transfer config.
public class CreateAzureBlobStorageTransfer {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    final String projectId = "MY_PROJECT_ID";
    final String displayName = "MY_TRANSFER_DISPLAY_NAME";
    final String datasetId = "MY_DATASET_ID";
    String tableId = "MY_TABLE_ID";
    String storageAccount = "MY_AZURE_STORAGE_ACCOUNT_NAME";
    String containerName = "MY_AZURE_CONTAINER_NAME";
    String dataPath = "MY_AZURE_FILE_NAME_OR_PREFIX";
    String sasToken = "MY_AZURE_SAS_TOKEN";
    String fileFormat = "CSV";
    String fieldDelimiter = ",";
    String skipLeadingRows = "1";
    Map<String, Value> params = new HashMap<>();
    params.put(
        "destination_table_name_template", Value.newBuilder().setStringValue(tableId).build());
    params.put("storage_account", Value.newBuilder().setStringValue(storageAccount).build());
    params.put("container", Value.newBuilder().setStringValue(containerName).build());
    params.put("data_path", Value.newBuilder().setStringValue(dataPath).build());
    params.put("sas_token", Value.newBuilder().setStringValue(sasToken).build());
    params.put("file_format", Value.newBuilder().setStringValue(fileFormat).build());
    params.put("field_delimiter", Value.newBuilder().setStringValue(fieldDelimiter).build());
    params.put("skip_leading_rows", Value.newBuilder().setStringValue(skipLeadingRows).build());
    createAzureBlobStorageTransfer(projectId, displayName, datasetId, params);
  }

  public static void createAzureBlobStorageTransfer(
      String projectId, String displayName, String datasetId, Map<String, Value> params)
      throws IOException {
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setDestinationDatasetId(datasetId)
            .setDisplayName(displayName)
            .setDataSourceId("azure_blob_storage")
            .setParams(Struct.newBuilder().putAllFields(params).build())
            .setSchedule("every 24 hours")
            .build();
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (DataTransferServiceClient client = DataTransferServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      CreateTransferConfigRequest request =
          CreateTransferConfigRequest.newBuilder()
              .setParent(parent.toString())
              .setTransferConfig(transferConfig)
              .build();
      TransferConfig config = client.createTransferConfig(request);
      System.out.println("Azure Blob Storage transfer created successfully: " + config.getName());
    } catch (ApiException ex) {
      System.out.print("Azure Blob Storage transfer was not created." + ex.toString());
    }
  }
}

Menentukan kunci enkripsi dengan transfer

Anda dapat menentukan kunci enkripsi yang dikelola pelanggan (CMEK) guna mengenkripsi data untuk proses transfer. Anda dapat menggunakan CMEK untuk mendukung transfer dari Azure Blob Storage.

Saat Anda menentukan CMEK dengan transfer, BigQuery Data Transfer Service akan menerapkan CMEK ke cache perantara data yang diserap dalam disk, sehingga seluruh alur kerja transfer data mematuhi CMEK.

Anda tidak dapat memperbarui transfer yang sudah ada untuk menambahkan CMEK jika transfer tersebut awalnya tidak dibuat dengan CMEK. Misalnya, Anda tidak dapat mengubah tabel tujuan yang awalnya dienkripsi secara default menjadi kini dienkripsi dengan CMEK. Sebaliknya, Anda juga tidak dapat mengubah tabel tujuan yang dienkripsi CMEK agar memiliki jenis enkripsi yang berbeda.

Anda dapat memperbarui CMEK untuk transfer jika konfigurasi transfer awalnya dibuat dengan enkripsi CMEK. Saat Anda memperbarui CMEK untuk konfigurasi transfer, BigQuery Data Transfer Service akan menyebarkan CMEK ke tabel tujuan pada proses transfer berikutnya. Di sini, BigQuery Data Transfer Service akan mengganti CMEK yang sudah usang dengan CMEK baru selama proses transfer. Untuk informasi selengkapnya, lihat Memperbarui transfer.

Anda juga dapat menggunakan kunci default project. Saat Anda menentukan kunci default project dengan transfer, BigQuery Data Transfer Service akan menggunakan kunci default project sebagai kunci default untuk setiap konfigurasi transfer baru.

Memecahkan masalah penyiapan transfer

Jika Anda mengalami masalah saat menyiapkan transfer data, lihat Masalah transfer Penyimpanan Blob.

Langkah selanjutnya