Mengekspor file CSV

Halaman ini menjelaskan cara mengekspor data dari cluster AlloyDB for PostgreSQL ke bucket Cloud Storage dalam format CSV, yang dapat digunakan oleh alat dan lingkungan lainnya.

Untuk informasi tentang cara memigrasikan seluruh database dari server database yang didukung ke instance AlloyDB baru, lihat Memigrasikan database ke AlloyDB menggunakan Database Migration Service. Jika Anda mengekspor karena ingin membuat instance baru dari file yang diekspor, pertimbangkan untuk memulihkan cluster dari cadangan yang disimpan.

Anda dapat membatalkan ekspor data dari cluster AlloyDB untuk PostgreSQL. Untuk informasi selengkapnya, lihat Membatalkan ekspor data.

Sebelum memulai

  • Sebelum Anda memulai operasi ekspor, perlu diingat bahwa operasi ekspor menggunakan resource database, tetapi tidak mengganggu operasi database standar, kecuali jika instance tersebut kurang tersedia.
  • SELECT_QUERY dapat berisi komentar atau spasi kosong di awal dan di akhir. Komentar diabaikan dan spasi kosong dipangkas sebelum menjalankan kueri ekspor.
  • Biaya transfer data antar-region berlaku jika bucket target berada di region yang berbeda dengan cluster sumber. Untuk informasi selengkapnya, lihat Harga AlloyDB untuk PostgreSQL.
  • Beberapa operasi ekspor dapat berjalan secara paralel.
  • Kompresi diaktifkan jika nama objek diakhiri dengan ekstensi .gz. Objek tersebut kemudian diekspor dalam format .gz ke Cloud Storage.
  • Hanya karakter ASCII dalam kode heksadesimal (dengan atau tanpa awalan 0x) yang diizinkan untuk nilai karakter dalam opsi CSV seperti field_delimiter, quote_character, dan escape_character.

Peran dan izin yang diperlukan untuk mengekspor dari AlloyDB

Untuk mengekspor data dari AlloyDB ke Cloud Storage, pengguna yang memulai ekspor harus memiliki salah satu peran Identity and Access Management (IAM) berikut:

Selain itu, akun layanan untuk cluster AlloyDB harus memiliki salah satu peran berikut:

  • Peran IAM storage.objectAdmin
  • Peran khusus, termasuk izin berikut:
    • storage.objects.create

Untuk mendapatkan bantuan terkait peran IAM, lihat Identity and Access Management.

Mengekspor data ke file CSV

Selama ekspor CSV berlangsung, Anda dapat menentukan skema yang akan diekspor. Semua skema di tingkat database memenuhi syarat untuk diekspor.

Anda dapat menggunakan gcloud CLI atau REST API untuk menyesuaikan format file CSV.

gcloud

  1. Buat bucket Cloud Storage.
  2. Berikan izin akun layanan ke bucket Cloud Storage untuk operasi ekspor. Gunakan format akun layanan untuk mengidentifikasi akun layanan untuk project tempat Anda mengekspor. Format untuk akun layanan adalah sebagai berikut:

    service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com
  3. Gunakan gcloud storage buckets add-iam-policy-binding untuk memberikan storage.objectAdmin peran IAM ke akun layanan. Untuk mendapatkan bantuan terkait penetapan izin IAM, lihat Menggunakan izin IAM.

  4. Ekspor database ke bucket Cloud Storage Anda.

    Jalankan perintah CSV ekspor: TODOgcloud alloydb clusters export.

    Tabel berikut mencantumkan opsi untuk mengekspor data dalam format CSV:

    • --select-query (Wajib): Kueri pilih yang digunakan untuk mengekstrak data.
    • --async (Opsional): segera kembali, tanpa menunggu operasi yang sedang berlangsung selesai.
    • --field-delimiter (Opsional): menentukan karakter yang memisahkan kolom di setiap baris (baris) file. Defaultnya adalah koma. Nilai argumen ini harus berupa karakter dalam kode ASCII hex.
    • --quote-character (Opsional): Menentukan karakter tanda petik yang akan digunakan saat nilai data diapit tanda petik. Defaultnya adalah tanda petik ganda. Nilai argumen ini harus berupa karakter dalam kode ASCII hex.
    • --escape-character (Opsional): Menentukan karakter yang harus muncul sebelum karakter data yang perlu di-escape. Defaultnya sama dengan --quote-character. Nilai argumen ini harus berupa karakter dalam kode ASCII hex.

    Untuk menggunakan fitur ini, sertakan opsi ini dalam perintah gcloud CLI.

    Jika tidak, hapus parameter ini dari perintah berikut:

    gcloud alloydb clusters export CLUSTER_NAME
      --region=REGION
      --database=DATABASE_NAME
      --gcs-uri="gs://BUCKET_NAME/OBJECT_NAME"
      --select-query=SELECT_QUERY
      --field-delimiter=FIELD_DELIMITER
      --quote-character=QUOTE_CHARACTER
      --escape-character=ESCAPE_CHARACTER
      --csv
  5. Jika Anda tidak perlu mempertahankan peran IAM yang telah ditetapkan sebelumnya, cabut peran tersebut sekarang.

REST v1

  1. Buat bucket untuk ekspor:

    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME>
  2. Gunakan format akun layanan untuk mengidentifikasi akun layanan untuk project tempat Anda mengekspor.

    Format untuk akun layanan adalah sebagai berikut:

     service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com

    Akun ini harus diberi izin ke bucket Cloud Storage untuk operasi ekspor.

  3. Gunakan gcloud storage buckets add-iam-policy-binding untuk memberikan storage.objectAdmin peran IAM ke akun layanan. Untuk mendapatkan bantuan terkait penetapan izin IAM, lihat Menggunakan izin IAM.

  4. Ekspor database Anda.

    Gunakan metode HTTP dan URL berikut:

    POST https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export

    Sebelum menggunakan data permintaan apa pun, lakukan penggantian berikut:

    • PROJECT_ID: project ID.
    • REGION: region tempat cluster AlloyDB di-deploy.
    • CLUSTER_ID: ID cluster.
    • BUCKET_NAME: nama bucket Cloud Storage.
    • PATH_TO_CSV_FILE: jalur ke file CSV.
    • DATABASE_NAME: nama database di dalam cluster AlloyDB.
    • SELECT_QUERY: kueri SQL untuk ekspor.

    • ESCAPE_CHARACTER (Opsional): karakter yang harus muncul sebelum karakter data yang perlu di-escape. Nilai argumen ini harus berupa karakter dalam Kode ASCII Hex. Misalnya, 22 mewakili tanda kutip ganda.

    • QUOTE_CHARACTER (Opsional): karakter yang mengapit nilai dari kolom yang memiliki jenis data string. Nilai argumen ini harus berupa karakter dalam Kode ASCII Hex. Misalnya, 22 mewakili tanda kutip ganda.

    • FIELD_DELIMITER (Opsional): karakter yang memisahkan nilai kolom. Nilai argumen ini harus berupa karakter dalam Kode ASCII Hex. Misalnya, 2C mewakili koma.

    Meminta isi JSON:

    {
      "gcs_destination": {
        "uri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE"
      },
      "database": "DATABASE_NAME",
      "csv_export_options": {
        "select_query": "SELECT_QUERY",
        "escape_character": "ESCAPE_CHARACTER",
        "quote_character": "QUOTE_CHARACTER",
        "field_delimiter": "FIELD_DELIMITER"
      }
    }
    

    Untuk mengirim permintaan Anda, gunakan salah satu opsi berikut:

curl (Linux, macOS, atau Cloud Shell)

Simpan isi permintaan dalam file bernama request.json dan jalankan perintah berikut:

       curl -X POST \
             -H "Authorization: Bearer $(gcloud auth print-access-token)" \
             -H "Content-Type: application/json; charset=utf-8" \
             -d @request.json \
             "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export"
  

PowerShell (Windows)

Simpan isi permintaan dalam file bernama request.json dan jalankan perintah berikut:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
      -Method POST `
      -Headers $headers `
      -ContentType: "application/json; charset=utf-8" `
      -InFile request.json `
      -Uri "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export"| Select-Object -Expand Content
  

Anda akan menerima respons JSON yang mirip dengan berikut ini:

Respons

    {
     "name": "projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID",
     "metadata": {
      "@type": "type.googleapis.com/google.cloud.alloydb.v1.OperationMetadata",
      "createTime": "2024-09-17T06:05:31.244428646Z",
      "target": "projects/PROJECT_ID/locations/REGION/clusters/TARGET_CLUSTER",
      "verb": "export",
      "requestedCancellation": false,
      "apiVersion": "v1"
     },
     "done": false
    }
  

Jika Anda tidak perlu mempertahankan izin IAM yang telah ditetapkan sebelumnya, hapus sekarang.

Untuk mengetahui daftar lengkap parameter permintaan, lihat clusters:export.

Menyesuaikan format dari file ekspor CSV

Anda dapat menggunakan gcloud CLI atau REST API untuk menyesuaikan format file CSV. Saat melakukan ekspor, Anda dapat menentukan opsi pemformatan berikut:


Opsi CSV

Nilai default

flag gcloud

Properti REST API

Deskripsi

Escape

Nilai default-nya sama dengan nilai QUOTE.
--escape-character escape_character Karakter yang muncul sebelum karakter data yang perlu di-escape.

Penawaran harga
"22"
Kode hex ASCII untuk tanda kutip ganda.
--quote-character quote_character Menentukan karakter tanda petik yang akan digunakan saat nilai data diapit tanda petik.
Field delimiter "2C"
Kode hex ASCII untuk koma.
--field-delimiter field_delimiter Karakter yang memisahkan nilai kolom.

Misalnya, perintah gcloud CLI yang menggunakan semua argumen ini mungkin terlihat mirip dengan yang berikut ini:

gcloud alloydb clusters export CLUSTER_NAME \
--region=REGION \
--database=DATABASE_NAME \
--gcs-uri='gs://BUCKET_NAME/PATH_TO_CSV_FILE' \
--select-query=SELECT_QUERY \
--field-delimiter='2C' \
--quote-character='22' \
--escape-character='5C'
--csv

Isi permintaan REST API yang setara terlihat mirip dengan berikut ini:

{
 "exportContext":
   {
      "gcs_destination": {
        "uri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE",
      },
      "database": "DATABASE_NAME",
      "csv_export_options":
       {
           "select_query": "SELECT_QUERY",
           "escape_character": "5C",
           "quote_character": "22",
           "field_delimiter": "2C",
       }
   }
}

Secara default, ekspor CSV membuat output CSV standar. Jika memerlukan lebih banyak opsi daripada yang disediakan oleh AlloyDB, Anda dapat menggunakan pernyataan berikut di klien psql:

     \copy `TABLE_NAME` TO `CSV_FILE_NAME.csv' WITH
          (FORMAT csv, ESCAPE 'ESCAPE_CHARACTER', QUOTE 'QUOTE_CHARACTER',
          DELIMITER 'DELIMITER_CHARACTER', ENCODING 'UTF8', NULL 'NULL_MARKER_STRING');

Langkah selanjutnya