Mengekspor dan mengimpor menggunakan file CSV

Halaman ini menjelaskan cara mengekspor dan mengimpor data ke instance Cloud SQL menggunakan file CSV.

Sebelum memulai

Sebelum Anda memulai operasi ekspor atau impor:

  • Pastikan database Anda memiliki ruang kosong yang memadai.
  • Operasi ekspor dan impor menggunakan resource database, tetapi tidak mengganggu operasi database normal kecuali jika penyediaan instance kurang lengkap.

  • Verifikasi bahwa file CSV memiliki data yang diharapkan dan memiliki format yang benar. File CSV harus memiliki satu baris untuk setiap baris kolom data.
  • Ikuti praktik terbaik untuk mengekspor dan mengimpor data.

Mengekspor data dari Cloud SQL untuk MySQL

Peran dan izin yang diperlukan untuk mengekspor dari Cloud SQL untuk MySQL

Untuk mengekspor data dari Cloud SQL ke Cloud Storage, pengguna yang memulai ekspor harus memiliki salah satu peran berikut:

Selain itu, akun layanan untuk instance Cloud SQL harus memiliki salah satu peran berikut:

  • Peran Identity and Access Management (IAM) storage.objectAdmin
  • Peran khusus, termasuk izin berikut:
    • storage.objects.create
    • storage.objects.list (hanya untuk mengekspor file secara paralel)
    • storage.objects.delete (hanya untuk mengekspor file secara paralel)

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

Mengekspor data ke file CSV dari Cloud SQL untuk MySQL

Anda dapat mengekspor data dalam format CSV, yang dapat digunakan oleh alat dan lingkungan lainnya. Ekspor terjadi di tingkat database. Selama ekspor CSV berlangsung, Anda dapat menentukan skema yang akan diekspor. Semua skema di tingkat database memenuhi syarat untuk diekspor.

Untuk mengekspor data dari database pada instance Cloud SQL ke file CSV di bucket Cloud Storage:

Konsol

  1. Di konsol Google Cloud, buka halaman Instance Cloud SQL.

    Buka Instance Cloud SQL

  2. Untuk membuka halaman Ringkasan instance, klik nama instance.
  3. Klik Ekspor.
  4. Pilih Simpan ekspor untuk mengizinkan operasi lain dilakukan saat ekspor sedang berlangsung.
  5. Klik Tampilkan opsi lanjutan.
  6. Di bagian Database, pilih nama database dari menu drop-down.
  7. Untuk kueri SQL, masukkan kueri SQL guna menentukan tabel yang datanya akan diekspor.

    Misalnya, untuk mengekspor seluruh konten tabel entries dalam database guestbook, Anda harus memasukkan

    SELECT * FROM guestbook.entries;
    Kueri Anda harus menentukan tabel dalam database yang ditentukan. Anda tidak dapat mengekspor seluruh database dalam format CSV.

  8. Klik Ekspor untuk memulai ekspor.
  9. Kotak Ekspor database? akan terbuka dengan pesan bahwa proses ekspor dapat memerlukan waktu satu jam atau lebih untuk database yang besar. Selama proses ekspor, satu-satunya operasi yang dapat Anda lakukan pada instance adalah melihat informasi. Setelah ekspor dimulai, Anda dapat membatalkan operasi. Jika ini adalah saat yang tepat untuk memulai ekspor, klik Ekspor. Jika tidak, klik Batal.

gcloud

  1. Membuat bucket Cloud Storage.
  2. Upload file ke bucket Anda.

    Untuk mendapatkan bantuan dalam mengupload file ke bucket, lihat Mengupload objek.

  3. Temukan akun layanan untuk instance Cloud SQL tempat Anda melakukan ekspor. Anda dapat melakukannya dengan menjalankan perintah gcloud sql instances describe. Cari kolom serviceAccountEmailAddress di output.
    gcloud sql instances describe INSTANCE_NAME
  4. Gunakan gcloud storage buckets add-iam-policy-binding untuk memberikan peran IAM storage.objectAdmin ke akun layanan instance Cloud SQL. Untuk mendapatkan bantuan terkait penetapan izin IAM, lihat Menggunakan izin IAM.
  5. Ekspor database:
    gcloud sql export csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
    --database=DATABASE_NAME \
    --offload \
    --query=SELECT_QUERY
    

    Untuk informasi tentang penggunaan perintah export csv, lihat halaman referensi perintah sql export csv.

  6. Jika Anda tidak perlu mempertahankan peran IAM yang telah ditetapkan sebelumnya, cabut sekarang.

REST v1

  1. Buat bucket untuk ekspor:
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
    

    Langkah ini tidak wajib, tetapi sangat direkomendasikan, agar Anda tidak membuka akses ke data lain.

  2. Berikan legacyBucketWriter pada instance Anda peran IAM untuk bucket Anda. Untuk mendapatkan bantuan terkait penetapan izin IAM, lihat Menggunakan izin IAM.
  3. Ekspor database Anda:

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • project-id: ID project
    • instance-id: ID instance
    • bucket_name: Nama bucket Cloud Storage
    • path_to_csv_file: Jalur ke file CSV
    • database_name: Nama database di dalam instance Cloud SQL
    • offload: Mengaktifkan ekspor serverless. Tetapkan ke true untuk menggunakan ekspor serverless.
    • select_query: Kueri SQL untuk ekspor (opsional)
    • escape_character: Karakter yang akan muncul sebelum karakter data yang perlu di-escape. Nilai argumen ini harus berupa karakter dalam Kode ASCII Hex. Misalnya, "22" mewakili tanda kutip ganda. (opsional)
    • quote_character:Karakter yang mencakup nilai dari kolom yang memiliki jenis data string. Nilai argumen ini harus berupa karakter dalam Kode ASCII Hex. Misalnya, "22" mewakili tanda kutip ganda. (opsional)
    • fields_terminated_by: Karakter yang memisahkan nilai kolom. Nilai argumen ini harus berupa karakter dalam Kode ASCII Hex. Misalnya, "2C" mewakili koma. (opsional)
    • lines_terminated_by: Karakter yang memisahkan kumpulan data baris. Nilai argumen ini harus berupa karakter dalam Kode ASCII Hex. Misalnya, "0A" mewakili baris baru. (opsional)

    Metode HTTP dan URL:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/export

    Meminta isi JSON:

    {
     "exportContext":
       {
          "fileType": "CSV",
          "uri": "gs://bucket_name/path_to_csv_file",
          "databases": ["database_name"],
          "offload": true | false
          "csvExportOptions":
           {
               "selectQuery":"select_query",
               "escapeCharacter":"escape_character",
               "quoteCharacter":"quote_character",
               "fieldsTerminatedBy":"fields_terminated_by",
               "linesTerminatedBy":"lines_terminated_by"
           }
       }
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Anda akan menerima respons JSON yang mirip dengan yang berikut ini:

    Jika kueri pilihan Anda menentukan database, kueri tersebut akan menggantikan properti databases.

  4. Jika Anda tidak perlu mempertahankan izin IAM yang telah ditetapkan sebelumnya, hapus sekarang.
Untuk mengetahui daftar lengkap parameter permintaan, lihat halaman instance:ekspor.

REST v1beta4

  1. Buat bucket untuk ekspor:
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    Langkah ini tidak wajib, tetapi sangat direkomendasikan, agar Anda tidak membuka akses ke data lain.

  2. Berikan storage.objectAdmin pada instance Anda peran IAM untuk bucket Anda. Untuk mendapatkan bantuan terkait penetapan izin IAM, lihat Menggunakan izin IAM.
  3. Ekspor database Anda:

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • project-id: ID project
    • instance-id: ID instance
    • bucket_name: Nama bucket Cloud Storage
    • path_to_csv_file: Jalur ke file CSV
    • database_name: Nama database di dalam instance Cloud SQL
    • offload: Mengaktifkan ekspor serverless. Tetapkan ke true untuk menggunakan ekspor serverless.
    • select_query: Kueri SQL untuk ekspor (opsional)
    • escape_character: Karakter yang akan muncul sebelum karakter data yang perlu di-escape. Nilai argumen ini harus dalam format hex ASCII. Misalnya, "22" mewakili tanda kutip ganda. (opsional)
    • quote_character: Karakter yang mencakup nilai dari kolom yang memiliki jenis data string. Nilai argumen ini harus dalam format hex ASCII. Misalnya, "22" mewakili tanda kutip ganda. (opsional)
    • fields_terminated_by: Karakter yang memisahkan nilai kolom. Nilai argumen ini harus dalam format hex ASCII. Misalnya, "2C" mewakili koma. (opsional)
    • lines_terminated_by: Karakter yang memisahkan kumpulan data baris. Nilai argumen ini harus dalam format hex ASCII. Misalnya, "0A" mewakili baris baru. (opsional)

    Metode HTTP dan URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export

    Meminta isi JSON:

    {
     "exportContext":
       {
          "fileType": "CSV",
          "uri": "gs://bucket_name/path_to_csv_file",
          "databases": ["database_name"],
          "offload": true | false
          "csvExportOptions":
           {
               "selectQuery": "select_query",
               "escapeCharacter":  "escape_character",
               "quoteCharacter": "quote_character",
               "fieldsTerminatedBy": "fields_terminated_by",
               "linesTerminatedBy": "lines_terminated_by"
           }
       }
    }
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Anda akan menerima respons JSON yang mirip dengan yang berikut ini:

    Jika kueri pilihan Anda menentukan database, kueri tersebut akan menggantikan properti databases.

  4. Jika Anda tidak perlu mempertahankan peran IAM yang telah ditetapkan sebelumnya, cabut sekarang.
Untuk mengetahui daftar lengkap parameter permintaan, lihat halaman instance:ekspor.

Menyesuaikan format dari file ekspor CSV

Anda dapat menggunakan gcloud 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

"5C"

Kode hex ASCII untuk pemisah file.

--escape escapeCharacter

Karakter yang muncul sebelum karakter data yang perlu di-escape.

Hanya tersedia untuk MySQL dan PostgreSQL.

Penawaran harga

"22"

Kode hex ASCII untuk tanda kutip ganda.

--quote quoteCharacter

Karakter yang mengapit nilai dari kolom yang memiliki tipe data string.

Hanya tersedia untuk MySQL dan PostgreSQL.

Field delimiter

"2C"

Kode hex ASCII untuk koma.

--fields-terminated-by fieldsTerminatedBy

Karakter yang memisahkan nilai kolom.

Hanya tersedia untuk MySQL dan PostgreSQL.

Karakter newline

"0A"

Kode hex ASCII untuk newline.

--lines-terminated-by linesTerminatedBy

Karakter yang memisahkan kumpulan data baris.

Hanya tersedia untuk MySQL.

Misalnya, perintah gcloud yang menggunakan semua argumen ini bisa menjadi seperti berikut:

gcloud sql export csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
--database=DATABASE_NAME \
--offload \
--query=SELECT_QUERY \
--quote="22" \
--escape="5C" \
--fields-terminated-by="2C" \
--lines-terminated-by="0A"

Isi permintaan REST API yang setara akan terlihat seperti ini:

{
 "exportContext":
   {
      "fileType": "CSV",
      "uri": "gs://bucket_name/path_to_csv_file",
      "databases": ["DATABASE_NAME"],
      "offload": true,
      "csvExportOptions":
       {
           "selectQuery": "SELECT_QUERY",
           "escapeCharacter":  "5C",
           "quoteCharacter": "22",
           "fieldsTerminatedBy": "2C",
           "linesTerminatedBy": "0A"
       }
   }
}

Contoh gcloud dan API sebelumnya setara dengan menjalankan pernyataan SQL berikut:

SELECT [QUERY] INTO OUTFILE ... CHARACTER SET 'utf8mb4'
            FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
            ESCAPED BY '\\' LINES TERMINATED BY '\n'

Mengimpor data ke Cloud SQL untuk MySQL

Peran dan izin yang diperlukan untuk mengimpor ke Cloud SQL untuk MySQL

Untuk mengimpor data dari Cloud Storage ke Cloud SQL, pengguna yang memulai impor harus memiliki salah satu peran berikut:

Selain itu, akun layanan untuk instance Cloud SQL harus memiliki salah satu peran berikut:

  • Peran IAM storage.objectAdmin
  • Peran khusus, termasuk izin berikut:
    • storage.objects.get
    • storage.objects.list (hanya untuk mengimpor file secara paralel)

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

Mengekspor data dari server MySQL lokal ke file CSV

Untuk mengekspor tabel MySQL yang akan diimpor ke Cloud SQL, sebaiknya format file tersebut menggunakan perintah berikut:

mysql --host=INSTANCE_IP --user=USER_NAME --password DATABASE \
-e " SELECT * FROM TABLE INTO OUTFILE 'FILE_NAME' CHARACTER SET 'utf8mb4'
     FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\"' "

Anda dapat menyesuaikan format file ekspor CSV.

Mengimpor data dari file CSV ke Cloud SQL untuk MySQL

Persyaratan format file CSV

File CSV harus memiliki satu baris untuk setiap baris data dan menggunakan kolom yang dipisahkan koma.

Untuk mengimpor data ke instance Cloud SQL menggunakan file CSV:

Konsol

  1. Di konsol Google Cloud, buka halaman Instance Cloud SQL.

    Buka Instance Cloud SQL

  2. Untuk membuka halaman Ringkasan instance, klik nama instance.
  3. Klik Import.
  4. Di bagian Pilih file yang ingin Anda impor data, masukkan jalur ke bucket dan file CSV yang akan digunakan untuk impor. Atau, untuk mencari file:
    1. Klik Cari.
    2. Di bagian Lokasi, klik dua kali nama bucket dalam daftar.
    3. Pilih file dalam daftar.
    4. Klik Pilih.

    Anda dapat mengimpor file (.gz) yang dikompresi atau file (.csv) yang tidak dikompresi.

  5. Di bagian Format, pilih CSV.
  6. Tentukan Database dan Tabel di instance Cloud SQL tempat Anda ingin mengimpor file CSV.
  7. Klik Impor untuk memulai impor.

gcloud

  1. Membuat bucket Cloud Storage.
  2. Upload file ke bucket Anda.

    Untuk mendapatkan bantuan dalam mengupload file ke bucket, lihat Mengupload objek.

  3. Upload data dari file CSV ke bucket.
  4. Identifikasi akun layanan untuk instance Cloud SQL tempat Anda mengekspor. Anda dapat melakukannya dengan menjalankan perintah gcloud sql instances describe dengan nama instance. Cari kolom serviceAccountEmailAddress di output.
    gcloud sql instances describe INSTANCE_NAME
  5. Salin kolom serviceAccountEmailAddress.
  6. Gunakan gcloud storage buckets add-iam-policy-binding untuk memberikan peran IAM storage.objectAdmin ke akun layanan instance Cloud SQL untuk bucket. Untuk mendapatkan bantuan terkait penetapan izin IAM, lihat Menggunakan izin IAM.
  7. Impor file:
    gcloud sql import csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
    --database=DATABASE_NAME \
    --table=TABLE_NAME

    Untuk informasi tentang penggunaan perintah import csv, lihat halaman referensi perintah sql import csv.

  8. Jika Anda tidak perlu mempertahankan izin IAM yang telah ditetapkan sebelumnya, hapus izin tersebut menggunakan gcloud storage buckets remove-iam-policy-binding.

REST v1

  1. Membuat bucket Cloud Storage.
  2. Upload file ke bucket Anda.

    Untuk mendapatkan bantuan dalam mengupload file ke bucket, lihat Mengupload objek.

  3. Beri instance Anda peran IAM legacyBucketWriter dan objectViewer untuk bucket Anda. Untuk mendapatkan bantuan terkait penetapan izin IAM, lihat Menggunakan izin IAM.
  4. Impor file:

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • project-id: ID project
    • instance-id: ID instance
    • bucket_name: Nama bucket Cloud Storage
    • path_to_csv_file: Jalur ke file CSV
    • database_name: Nama database di dalam instance Cloud SQL
    • table_name: Nama tabel database
    • escape_character: Karakter yang akan muncul sebelum karakter data yang perlu di-escape. Nilai argumen ini harus berupa karakter dalam Kode ASCII Hex. Misalnya, "22" mewakili tanda kutip ganda. (opsional)
    • quote_character: Karakter yang mencakup nilai dari kolom yang memiliki jenis data string. Nilai argumen ini harus berupa karakter dalam Kode ASCII Hex. Misalnya, "22" mewakili tanda kutip ganda. (opsional)
    • fields_terminated_by: Karakter yang memisahkan nilai kolom. Nilai argumen ini harus berupa karakter dalam Kode ASCII Hex. Misalnya, "2C" mewakili koma. (opsional)
    • lines_terminated_by: Karakter yang memisahkan kumpulan data baris. Nilai argumen ini harus berupa karakter dalam Kode ASCII Hex. Misalnya, "0A" mewakili baris baru. (opsional)

    Metode HTTP dan URL:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import

    Meminta isi JSON:

    {
     "importContext":
       {
          "fileType": "CSV",
          "uri": "gs://bucket_name/path_to_csv_file",
          "database": "database_name",
          "csvImportOptions":
           {
             "table": "table_name",
             "escapeCharacter": "escape_character",
             "quoteCharacter": "quote_character",
             "fieldsTerminatedBy": "fields_terminated_by",
             "linesTerminatedBy": "lines_terminated_by"
           }
       }
    }
    
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Anda akan menerima respons JSON yang mirip dengan yang berikut ini:

    Untuk mengetahui daftar lengkap parameter permintaan, lihat halaman instance:import.
  5. Jika Anda tidak perlu mempertahankan izin IAM yang telah ditetapkan sebelumnya, hapus izin tersebut.

REST v1beta4

  1. Membuat bucket Cloud Storage.
  2. Upload file ke bucket Anda.

    Untuk mendapatkan bantuan dalam mengupload file ke bucket, lihat Mengupload objek.

  3. Beri instance peran IAMstorage.objectAdmin untuk bucket Anda. Untuk mendapatkan bantuan terkait penetapan izin IAM, lihat Menggunakan izin IAM.
  4. Impor file:

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • project-id: ID project
    • instance-id: ID instance
    • bucket_name: Nama bucket Cloud Storage
    • path_to_csv_file: Jalur ke file CSV
    • database_name: Nama database di dalam instance Cloud SQL
    • table_name: Nama tabel database
    • escape_character: Karakter yang akan muncul sebelum karakter data yang perlu di-escape. Nilai argumen ini harus dalam format hex ASCII. Misalnya,"22" mewakili tanda kutip ganda. (opsional)
    • quote_character: Karakter yang mencakup nilai dari kolom yang memiliki jenis data string. Nilai argumen ini harus dalam format hex ASCII. Misalnya, "22" mewakili tanda kutip ganda. (opsional)
    • fields_terminated_by: Karakter yang memisahkan nilai kolom. Nilai argumen ini harus dalam format hex ASCII. Misalnya, "2C" mewakili koma. (opsional)
    • lines_terminated_by: Karakter yang memisahkan kumpulan data baris. Nilai argumen ini harus dalam format hex ASCII. Misalnya, "0A" mewakili baris baru. (opsional)

    Metode HTTP dan URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import

    Meminta isi JSON:

    {
     "importContext":
       {
          "fileType": "CSV",
          "uri": "gs://bucket_name/path_to_csv_file",
          "database": "database_name",
          "csvImportOptions":
           {
             "table": "table_name",
             "escapeCharacter": "escape_character",
             "quoteCharacter": "quote_character",
             "fieldsTerminatedBy": "fields_terminated_by",
             "linesTerminatedBy": "lines_terminated_by"
           }
       }
    }
    
    

    Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

    Anda akan menerima respons JSON yang mirip dengan yang berikut ini:

    Untuk mengetahui daftar lengkap parameter permintaan, lihat halaman instance:import.
  5. Jika Anda tidak perlu mempertahankan izin IAM yang telah ditetapkan sebelumnya, hapus izin tersebut.

Menyesuaikan format file CSV untuk Cloud SQL untuk MySQL

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

Contoh perintah gcloud berikut:

gcloud sql import csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
--database=DATABASE_NAME \
--table=TABLE_NAME \
--quote="22" \
--escape="5C" \
--fields-terminated-by="2C" \
--lines-terminated-by="0A"

Isi permintaan REST API yang setara akan terlihat seperti ini:

{
 "importContext":
   {
      "fileType": "CSV",
      "uri": "gs://bucket_name/path_to_csv_file",
      "database": ["DATABASE_NAME"],
      "csvImportOptions":
       {
           "table": "TABLE_NAME",
           "escapeCharacter":  "5C",
           "quoteCharacter": "22",
           "fieldsTerminatedBy": "2C",
           "linesTerminatedBy": "0A"
       }
   }
}

Contoh gcloud dan API sebelumnya setara dengan menjalankan pernyataan SQL berikut:

LOAD DATA LOCAL INFILE ... CHARACTER SET 'utf8mb4'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\\'.

Jika Anda mendapatkan error seperti ERROR_RDBMS, pastikan tabel tersebut tersedia. Jika tabel tersebut ada, konfirmasi bahwa Anda memiliki izin yang benar pada bucket. Untuk mendapatkan bantuan dalam mengonfigurasi kontrol akses di Cloud Storage, lihat Membuat dan Mengelola Daftar Kontrol Akses.

Untuk melihat cara permintaan REST API yang mendasarinya dibuat untuk tugas ini, lihat APIs Explorer pada halaman instance:import.

Langkah berikutnya