Esportazione e importazione mediante file CSV

Questa pagina descrive l'esportazione e l'importazione dei dati nelle istanze Cloud SQL utilizzando i file CSV.

Prima di iniziare

Prima di iniziare un'operazione di esportazione o importazione:

  • Assicurati che il database disponga di spazio libero adeguato.
  • Le operazioni di esportazione e importazione utilizzano le risorse di database, ma non interferiscono con le normali operazioni di database, a meno che l'istanza non abbia un provisioning insufficiente.

  • Verifica che il file CSV contenga i dati previsti e che sia nel formato corretto. I file CSV devono avere una riga per ogni riga di campi di dati.
  • Segui le best practice per l'esportazione e l'importazione dei dati.

Esporta i dati da Cloud SQL per MySQL

Ruoli e autorizzazioni richiesti per l'esportazione da Cloud SQL per MySQL

Per esportare i dati da Cloud SQL a Cloud Storage, l'utente che avvia l'esportazione deve avere uno dei seguenti ruoli:

Inoltre, l'account di servizio per l'istanza Cloud SQL deve avere uno dei seguenti ruoli:

  • Ruolo di Identity and Access Management (IAM) di storage.objectAdmin
  • Un ruolo personalizzato, che includa le seguenti autorizzazioni:
    • storage.objects.create
    • storage.objects.list (solo per esportare file in parallelo)
    • storage.objects.delete (solo per esportare file in parallelo)

Per informazioni sui ruoli IAM, consulta Identity and Access Management.

Esporta i dati in un file CSV da Cloud SQL per MySQL

Puoi esportare i dati in formato CSV, che è utilizzabile da altri strumenti e ambienti. Le esportazioni vengono eseguite a livello di database. Durante un'esportazione CSV, puoi specificare gli schemi da esportare. Tutti gli schemi a livello di database sono idonei per l'esportazione.

Per esportare i dati da un database su un'istanza Cloud SQL in un file CSV in un bucket Cloud Storage:

Console

  1. Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.

    Vai a Istanze Cloud SQL

  2. Per aprire la pagina Panoramica di un'istanza, fai clic sul nome dell'istanza.
  3. Fai clic su Esporta.
  4. Seleziona Scarica esportazione per consentire lo svolgimento di altre operazioni durante l'esportazione.
  5. Fai clic su Mostra opzioni avanzate.
  6. Nella sezione Database, seleziona il nome del database dal menu a discesa.
  7. Per Query SQL, inserisci una query SQL per specificare la tabella da cui esportare i dati.

    Ad esempio, per esportare l'intero contenuto della tabella entries nel database guestbook, inserisci

    SELECT * FROM guestbook.entries;
    La query deve specificare una tabella nel database specificato. Non puoi esportare un intero database in formato CSV.

  8. Fai clic su Esporta per avviare l'esportazione.
  9. La finestra Vuoi esportare database? si apre con un messaggio che informa che il processo di esportazione può richiedere un'ora o più per database di grandi dimensioni. Durante l'esportazione, l'unica operazione che puoi eseguire sull'istanza è la visualizzazione delle informazioni. Dopo l'avvio dell'esportazione, puoi annullare l'operazione. Se è il momento giusto per avviare un'esportazione, fai clic su Esporta. In caso contrario, fai clic su Annulla.

gcloud

  1. Crea un bucket Cloud Storage.
  2. Carica il file nel bucket.

    Per informazioni sul caricamento dei file nei bucket, consulta Caricamento di oggetti.

  3. Trova l'account di servizio per l'istanza Cloud SQL da cui stai eseguendo l'esportazione. Puoi farlo eseguendo il comando gcloud sql instances describe. Cerca il campo serviceAccountEmailAddress nell'output.
    gcloud sql instances describe INSTANCE_NAME
    
  4. Utilizza gsutil iam per concedere il ruolo IAM storage.objectAdmin all'account di servizio dell'istanza Cloud SQL. Per assistenza sull'impostazione delle autorizzazioni IAM, consulta Utilizzo delle autorizzazioni IAM.
  5. Esporta il database:
    gcloud sql export csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
    --database=DATABASE_NAME \
    --offload \
    --query=SELECT_QUERY
    

    Per informazioni sull'utilizzo del comando export csv, consulta la pagina di riferimento del comando sql export csv.

  6. Se non è necessario conservare il ruolo IAM impostato in precedenza, revoke ora.

REST v1

  1. Crea un bucket per l'esportazione:
    gsutil mb -p PROJECT_NAME -l LOCATION_NAME gs://BUCKET_NAME
    

    Questo passaggio non è obbligatorio, ma vivamente consigliato, in modo da non consentire l'accesso ad altri dati.

  2. Fornisci all'istanza il ruolo IAM legacyBucketWriter per il bucket. Per assistenza sull'impostazione delle autorizzazioni IAM, consulta Utilizzo delle autorizzazioni IAM.
  3. Esporta il database:

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • project-id: l'ID progetto
    • instance-id: l'ID istanza
    • bucket_name: il nome del bucket Cloud Storage
    • path_to_csv_file: il percorso del file CSV
    • database_name: il nome di un database all'interno dell'istanza Cloud SQL
    • offload: abilita l'esportazione serverless. Imposta su true per utilizzare l'esportazione serverless.
    • select_query: query SQL per l'esportazione (facoltativa)
    • escape_character: il carattere che deve essere visualizzato prima di un carattere dei dati che deve essere preceduto dal carattere di escape. Il valore di questo argomento deve essere un carattere nel codice ASCII esadecimale. Ad esempio, "22" rappresenta le virgolette doppie. (facoltativo)
    • quote_character:il carattere che racchiude i valori delle colonne con un tipo di dati stringa. Il valore di questo argomento deve essere un carattere nel codice ASCII esadecimale. Ad esempio, "22" rappresenta le virgolette doppie. (facoltativo)
    • fields_terminated_by: il carattere che suddividi i valori della colonna. Il valore di questo argomento deve essere un carattere nel codice ASCII esadecimale. Ad esempio, "2C" rappresenta una virgola. (facoltativo)
    • lines_terminated_by: il carattere che registra la suddivisione delle righe. Il valore di questo argomento deve essere un carattere nel codice ASCII esadecimale. Ad esempio, "0A" rappresenta una nuova riga. (facoltativo)

    Metodo HTTP e URL:

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

    Corpo JSON della richiesta:

    {
     "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"
           }
       }
    }
    

    Per inviare la richiesta, espandi una delle seguenti opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

    Se la query selezionata specifica un database, questa sostituisce la proprietà databases.

  4. Se non è necessario conservare le autorizzazioni IAM che hai impostato in precedenza, rimuovile ora.
Per l'elenco completo dei parametri per la richiesta, consulta la pagina instances:export.

REST v1beta4

  1. Crea un bucket per l'esportazione:
    gsutil mb -p PROJECT_NAME -l LOCATION_NAME gs://BUCKET_NAME
    

    Questo passaggio non è obbligatorio, ma vivamente consigliato, in modo da non consentire l'accesso ad altri dati.

  2. Fornisci all'istanza il ruolo IAM storage.objectAdmin per il bucket. Per assistenza sull'impostazione delle autorizzazioni IAM, consulta Utilizzo delle autorizzazioni IAM.
  3. Esporta il database:

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • project-id: l'ID progetto
    • instance-id: l'ID istanza
    • bucket_name: il nome del bucket Cloud Storage
    • path_to_csv_file: il percorso del file CSV
    • database_name: il nome di un database all'interno dell'istanza Cloud SQL
    • offload: abilita l'esportazione serverless. Imposta su true per utilizzare l'esportazione serverless.
    • select_query: query SQL per l'esportazione (facoltativa)
    • escape_character: il carattere che deve essere visualizzato prima di un carattere dei dati che deve essere preceduto dal carattere di escape. Il valore di questo argomento deve essere nel formato esadecimale ASCII. Ad esempio, "22" rappresenta le virgolette doppie. (facoltativo)
    • quote_character: il carattere che racchiude i valori di colonne con un tipo di dati stringa. Il valore di questo argomento deve essere nel formato esadecimale ASCII. Ad esempio, "22" rappresenta le virgolette doppie. (facoltativo)
    • fields_terminated_by: il carattere che suddivide i valori della colonna. Il valore di questo argomento deve essere nel formato esadecimale ASCII. Ad esempio, "2C" rappresenta una virgola. (facoltativo)
    • lines_terminated_by: il carattere che registra la suddivisione delle righe. Il valore di questo argomento deve essere nel formato esadecimale ASCII. Ad esempio, "0A" rappresenta una nuova riga. (facoltativo)

    Metodo HTTP e URL:

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

    Corpo JSON della richiesta:

    {
     "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"
           }
       }
    }
    

    Per inviare la richiesta, espandi una delle seguenti opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

    Se la query selezionata specifica un database, questa sostituisce la proprietà databases.

  4. Se non è necessario conservare il ruolo IAM impostato in precedenza, revoke ora.
Per l'elenco completo dei parametri per la richiesta, consulta la pagina instances:export.

Personalizzare il formato di un file di esportazione CSV

Puoi usare gcloud o l'API REST per personalizzare il formato file CSV. Quando esegui un'esportazione, puoi specificare le seguenti opzioni di formattazione:

Opzione CSV Valore predefinito flag gcloud Proprietà API REST Descrizione
Escape

"5C"

Codice esadecimale ASCII per il separatore di file.

--escape escapeCharacter

Carattere visualizzato prima di un carattere dei dati che deve essere preceduto dal carattere di escape.

Disponibile solo per MySQL e PostgreSQL.

Preventivo

"22"

Codice esadecimale ASCII per le virgolette doppie.

--quote quoteCharacter

Carattere che racchiude i valori delle colonne con un tipo di dati stringa.

Disponibile solo per MySQL e PostgreSQL.

Delimitatore di campo

"2C"

Codice esadecimale ASCII per virgola.

--fields-terminated-by fieldsTerminatedBy

Carattere che divide i valori della colonna.

Disponibile solo per MySQL e PostgreSQL.

Carattere nuova riga

"0A"

Codice esadecimale ASCII per nuova riga.

--lines-terminated-by linesTerminatedBy

Carattere che divide i record di riga.

Disponibile solo per MySQL.

Ad esempio, un comando gcloud che utilizza tutti questi argomenti potrebbe essere simile al seguente:

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"

Il corpo della richiesta API REST equivalente sarà il seguente:

{
 "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"
       }
   }
}

Gli esempi precedenti di gcloud e API equivalgono all'esecuzione della seguente istruzione SQL:

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

Importa dati in Cloud SQL per MySQL

Ruoli e autorizzazioni obbligatori per l'importazione in Cloud SQL per MySQL

Per importare i dati da Cloud Storage in Cloud SQL, l'utente che avvia l'importazione deve avere uno dei seguenti ruoli:

Inoltre, l'account di servizio per l'istanza Cloud SQL deve avere uno dei seguenti ruoli:

  • Il ruolo IAM storage.objectAdmin
  • Un ruolo personalizzato, che includa le seguenti autorizzazioni:
    • storage.objects.get
    • storage.objects.list (solo per importare file in parallelo)

Per informazioni sui ruoli IAM, consulta Identity and Access Management.

Esporta i dati dal server MySQL locale in un file CSV

Per esportare una tabella MySQL per l'importazione in Cloud SQL, ti consigliamo di formattare il file utilizzando il seguente comando:

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 '\"' "

Puoi personalizzare il formato del file di esportazione CSV.

Importa i dati da un file CSV a Cloud SQL per MySQL

Requisiti per il formato dei file CSV

I file CSV devono avere una riga per ogni riga di dati e utilizzare campi separati da virgole.

Per importare i dati in un'istanza Cloud SQL utilizzando un file CSV:

Console

  1. Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.

    Vai a Istanze Cloud SQL

  2. Per aprire la pagina Panoramica di un'istanza, fai clic sul nome dell'istanza.
  3. Fai clic su Importa.
  4. Nella sezione Scegli il file da cui importare i dati, inserisci il percorso del bucket e del file CSV da utilizzare per l'importazione. In alternativa, per individuare il file:
    1. Fai clic su Sfoglia.
    2. Nella sezione Località, fai doppio clic sul nome del bucket nell'elenco.
    3. Seleziona il file nell'elenco.
    4. Fai clic su Seleziona.

    Puoi importare un file compresso (.gz) o non compresso (.csv).

  5. Nella sezione Formato, seleziona CSV.
  6. Specifica Database e Tabella nell'istanza Cloud SQL in cui vuoi importare il file CSV.
  7. Fai clic su Importa per avviare l'importazione.

gcloud

  1. Crea un bucket Cloud Storage.
  2. Carica il file nel bucket.

    Per informazioni sul caricamento dei file nei bucket, consulta Caricamento di oggetti.

  3. Carica i dati dal file CSV nel bucket.
  4. Identifica l'account di servizio per l'istanza Cloud SQL da cui stai eseguendo l'esportazione. Puoi farlo eseguendo il comando gcloud sql instances describe con il nome dell'istanza. Cerca il campo serviceAccountEmailAddress nell'output.
    gcloud sql instances describe INSTANCE_NAME
    
  5. Copia il campo serviceAccountEmailAddress.
  6. Utilizza gsutil iam per concedere il ruolo IAM storage.objectAdmin all'account di servizio dell'istanza Cloud SQL per il bucket. Per assistenza sull'impostazione delle autorizzazioni IAM, consulta Utilizzo delle autorizzazioni IAM.
  7. Importa il file:
    gcloud sql import csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
    --database=DATABASE_NAME \
    --table=TABLE_NAME
    

    Per informazioni sull'utilizzo del comando import csv, consulta la pagina di riferimento del comando sql import csv.

  8. Se non è necessario conservare le autorizzazioni IAM che hai impostato in precedenza, rimuovile utilizzando gsutil iam.

REST v1

  1. Crea un bucket Cloud Storage.
  2. Carica il file nel bucket.

    Per informazioni sul caricamento dei file nei bucket, consulta Caricamento di oggetti.

  3. Fornisci alla tua istanza i ruoli IAM legacyBucketWriter e objectViewer per il tuo bucket. Per assistenza sull'impostazione delle autorizzazioni IAM, consulta Utilizzo delle autorizzazioni IAM.
  4. Importa il file:

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • project-id: l'ID progetto
    • instance-id: l'ID istanza
    • bucket_name: il nome del bucket Cloud Storage
    • path_to_csv_file: il percorso del file CSV
    • database_name: il nome di un database all'interno dell'istanza Cloud SQL
    • table_name: il nome della tabella di database
    • escape_character: il carattere che deve essere visualizzato prima di un carattere dei dati che deve essere preceduto dal carattere di escape. Il valore di questo argomento deve essere un carattere nel codice ASCII esadecimale. Ad esempio, "22" rappresenta le virgolette doppie. (facoltativo)
    • quote_character: il carattere che racchiude i valori di colonne con un tipo di dati stringa. Il valore di questo argomento deve essere un carattere nel codice ASCII esadecimale. Ad esempio, "22" rappresenta le virgolette doppie. (facoltativo)
    • fields_terminated_by: il carattere che suddividi i valori della colonna. Il valore di questo argomento deve essere un carattere nel codice ASCII esadecimale. Ad esempio, "2C" rappresenta una virgola. (facoltativo)
    • lines_terminated_by: il carattere che registra la suddivisione delle righe. Il valore di questo argomento deve essere un carattere nel codice ASCII esadecimale. Ad esempio, "0A" rappresenta una nuova riga. (facoltativo)

    Metodo HTTP e URL:

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

    Corpo JSON della richiesta:

    {
     "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"
           }
       }
    }
    
    

    Per inviare la richiesta, espandi una delle seguenti opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

    Per l'elenco completo dei parametri per la richiesta, consulta la pagina instances:import.
  5. Se non è necessario conservare le autorizzazioni IAM che hai impostato in precedenza, rimuovile.

REST v1beta4

  1. Crea un bucket Cloud Storage.
  2. Carica il file nel bucket.

    Per informazioni sul caricamento dei file nei bucket, consulta Caricamento di oggetti.

  3. Fornisci all'istanza il ruolo IAM storage.objectAdmin per il bucket. Per assistenza sull'impostazione delle autorizzazioni IAM, consulta Utilizzo delle autorizzazioni IAM.
  4. Importa il file:

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • project-id: l'ID progetto
    • instance-id: l'ID istanza
    • bucket_name: il nome del bucket Cloud Storage
    • path_to_csv_file: il percorso del file CSV
    • database_name: il nome di un database all'interno dell'istanza Cloud SQL
    • table_name: il nome della tabella di database
    • escape_character: il carattere che deve essere visualizzato prima di un carattere dei dati che deve essere preceduto dal carattere di escape. Il valore di questo argomento deve essere nel formato esadecimale ASCII. Ad esempio,"22" rappresenta le virgolette doppie. (facoltativo)
    • quote_character: il carattere che racchiude i valori di colonne con un tipo di dati stringa. Il valore di questo argomento deve essere nel formato esadecimale ASCII. Ad esempio, "22" rappresenta le virgolette doppie. (facoltativo)
    • fields_terminated_by: il carattere che suddividi i valori della colonna. Il valore di questo argomento deve essere nel formato esadecimale ASCII. Ad esempio, "2C" rappresenta una virgola. (facoltativo)
    • lines_terminated_by: il carattere che registra la suddivisione delle righe. Il valore di questo argomento deve essere nel formato esadecimale ASCII. Ad esempio, "0A" rappresenta una nuova riga. (facoltativo)

    Metodo HTTP e URL:

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

    Corpo JSON della richiesta:

    {
     "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"
           }
       }
    }
    
    

    Per inviare la richiesta, espandi una delle seguenti opzioni:

    Dovresti ricevere una risposta JSON simile alla seguente:

    Per l'elenco completo dei parametri per la richiesta, consulta la pagina instances:import.
  5. Se non è necessario conservare le autorizzazioni IAM che hai impostato in precedenza, rimuovile.

Personalizzare il formato di un file CSV per Cloud SQL per MySQL

Puoi usare gcloud o l'API REST per personalizzare il formato file CSV.

Segue un comando gcloud di esempio:

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"

Il corpo della richiesta API REST equivalente sarà il seguente:

{
 "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"
       }
   }
}

Gli esempi precedenti di gcloud e API equivalgono all'esecuzione della seguente istruzione SQL:

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

Se viene visualizzato un errore come ERROR_RDBMS, assicurati che la tabella esista. Se la tabella esiste, verifica di disporre delle autorizzazioni corrette per il bucket. Per informazioni sulla configurazione del controllo dell'accesso dell'accesso in Cloud Storage, vedi Creare e gestire gli elenchi di controllo dell'accesso.

Per vedere come viene creata la richiesta API REST sottostante per questa attività, consulta la pagina Explorer API nella pagina instances:import.

Passaggi successivi