Exportar e importar usando arquivos CSV,Exportar e importar usando arquivos CSV,Exportar e importar usando arquivos CSV,Exportar e importar usando arquivos CSV

Esta página descreve como exportar e importar dados para instâncias do Cloud SQL usando arquivos CSV.

Antes de começar

Antes de iniciar uma operação de exportação ou importação:

  • Certifique-se de que seu banco de dados tenha espaço livre adequado.
  • As operações de exportação e importação usam recursos do banco de dados, mas não interferem nas operações normais do banco de dados, a menos que a instância esteja subprovisionada.

  • Verifique se o arquivo CSV contém os dados esperados e se está no formato correto. Arquivos CSV devem ter uma linha para cada linha de campos de dados.
  • Siga as melhores práticas para exportar e importar dados.

Exportar dados do Cloud SQL para MySQL

Funções e permissões necessárias para exportar do Cloud SQL para MySQL

Para exportar dados do Cloud SQL para o Cloud Storage, o usuário que inicia a exportação deve ter uma das seguintes funções:

Além disso, a conta de serviço da instância do Cloud SQL deve ter uma das seguintes funções:

  • A função storage.objectAdmin Identity and Access Management (IAM)
  • Uma função personalizada, incluindo as seguintes permissões:
    • storage.objects.create
    • storage.objects.list (para exportar arquivos apenas em paralelo)
    • storage.objects.delete (para exportar arquivos apenas em paralelo)

Para obter ajuda com funções do IAM, consulte Gerenciamento de Identidade e Acesso .

Exportar dados para um arquivo CSV do Cloud SQL para MySQL

Você pode exportar seus dados em formato CSV, que pode ser usado por outras ferramentas e ambientes. As exportações ocorrem no nível do banco de dados. Durante uma exportação CSV, você pode especificar os esquemas a serem exportados. Todos os esquemas no nível do banco de dados são elegíveis para exportação.

Para exportar dados de um banco de dados em uma instância do Cloud SQL para um arquivo CSV em um bucket do Cloud Storage:

Console

  1. No Google Cloud console, acesse a página Instâncias do Cloud SQL .

    Acesse Instâncias do Cloud SQL

  2. Para abrir a página Visão geral de uma instância, clique no nome da instância.
  3. Clique em Exportar .
  4. Selecione Descarregar exportação para permitir que outras operações ocorram enquanto a exportação estiver em andamento.
  5. Clique em Mostrar opções avançadas .
  6. Na seção Banco de dados , selecione o nome do banco de dados no menu suspenso.
  7. Para consulta SQL , insira uma consulta SQL para especificar a tabela da qual exportar dados.

    Por exemplo, para exportar todo o conteúdo da tabela entries no banco de dados guestbook , você insere

    SELECT * FROM guestbook.entries;
    Sua consulta deve especificar uma tabela no banco de dados especificado. Não é possível exportar um banco de dados inteiro no formato CSV.

  8. Clique em Exportar para iniciar a exportação.
  9. A caixa "Exportar banco de dados?" é aberta com uma mensagem informando que o processo de exportação pode levar uma hora ou mais para bancos de dados grandes. Durante a exportação, a única operação que você pode realizar na instância é visualizar as informações. Após o início da exportação, você pode cancelá-la . Se este for um bom momento para iniciar uma exportação, clique em Exportar . Caso contrário, clique em Cancelar .

gcloud

  1. Crie um bucket do Cloud Storage.
  2. Carregue o arquivo no seu bucket.

    Para obter ajuda com o upload de arquivos para buckets, consulte Upload de objetos .

  3. Encontre a conta de serviço da instância do Cloud SQL da qual você está exportando. Você pode fazer isso executando o comando gcloud sql instances describe . Procure o campo serviceAccountEmailAddress na saída.
    gcloud sql instances describe INSTANCE_NAME
  4. Use gcloud storage buckets add-iam-policy-binding para conceder a função storage.objectAdmin do IAM à conta de serviço da instância do Cloud SQL. Para obter ajuda na definição de permissões do IAM, consulte "Usando permissões do IAM" .
  5. Exportar o banco de dados:
    gcloud sql export csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
    --database=DATABASE_NAME \
    --offload \
    --query=SELECT_QUERY
    

    Para obter informações sobre como usar o comando export csv , consulte a página de referência do comando sql export csv .

  6. Se você não precisar manter a função do IAM definida anteriormente, revogue -a agora.

REST v1

  1. Crie um bucket para a exportação:
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
    

    Esta etapa não é obrigatória, mas é altamente recomendada, para que você não abra acesso a nenhum outro dado.

  2. Forneça à sua instância a função legacyBucketWriter do IAM para o seu bucket. Para obter ajuda com a definição de permissões do IAM, consulte Usando permissões do IAM .
  3. Exporte seu banco de dados:

    Antes de usar qualquer um dos dados solicitados, faça as seguintes substituições:

    • project-id : O ID do projeto
    • instance-id : O ID da instância
    • bucket_name : O nome do bucket do Cloud Storage
    • path_to_csv_file : O caminho para o arquivo CSV
    • database_name : O nome de um banco de dados dentro da instância do Cloud SQL
    • offload : Habilita a exportação sem servidor. Defina como true para usar a exportação sem servidor.
    • select_query : consulta SQL para exportação (opcional)
    • escape_character : O caractere que deve aparecer antes de um caractere de dados que precisa ser escapado. O valor deste argumento deve ser um caractere em código ASCII hexadecimal. Por exemplo, "22" representa aspas duplas. (opcional)
    • quote_character : o caractere que delimita valores de colunas que possuem um tipo de dado string. O valor deste argumento deve ser um caractere em código ASCII hexadecimal. Por exemplo, "22" representa aspas duplas. (opcional)
    • fields_terminated_by : O caractere que divide os valores da coluna. O valor deste argumento deve ser um caractere em código ASCII hexadecimal. Por exemplo, "2C" representa uma vírgula. (opcional)
    • lines_terminated_by : O caractere que divide os registros de linha. O valor deste argumento deve ser um caractere em código ASCII hexadecimal. Por exemplo, "0A" representa uma nova linha. (opcional)

    Método HTTP e URL:

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

    Corpo JSON da solicitação:

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

    Para enviar sua solicitação, expanda uma destas opções:

    Você deve receber uma resposta JSON semelhante à seguinte:

    Se sua consulta de seleção especificar um banco de dados, ela substituirá a propriedade databases .

  4. Se você não precisar manter as permissões do IAM definidas anteriormente, remova-as agora.
Para obter a lista completa de parâmetros para a solicitação, consulte a página instances:export .

REST v1beta4

  1. Crie um bucket para a exportação:
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    Esta etapa não é obrigatória, mas é altamente recomendada, para que você não abra acesso a nenhum outro dado.

  2. Forneça à sua instância a função storage.objectAdmin do IAM para o seu bucket. Para obter ajuda na definição de permissões do IAM, consulte "Usando permissões do IAM" .
  3. Exporte seu banco de dados:

    Antes de usar qualquer um dos dados solicitados, faça as seguintes substituições:

    • project-id : O ID do projeto
    • instance-id : O ID da instância
    • bucket_name : O nome do bucket do Cloud Storage
    • path_to_csv_file : O caminho para o arquivo CSV
    • database_name : O nome de um banco de dados dentro da instância do Cloud SQL
    • offload : Habilita a exportação sem servidor. Defina como true para usar a exportação sem servidor.
    • select_query : consulta SQL para exportação (opcional)
    • escape_character : O caractere que deve aparecer antes de um caractere de dados que precisa ser escapado. O valor deste argumento deve estar no formato hexadecimal ASCII . Por exemplo, "22" representa aspas duplas. (opcional)
    • quote_character : O caractere que delimita valores de colunas que possuem um tipo de dado string. O valor deste argumento deve estar no formato hexadecimal ASCII . Por exemplo, "22" representa aspas duplas. (opcional)
    • fields_terminated_by : O caractere que divide os valores da coluna. O valor deste argumento deve estar no formato hexadecimal ASCII . Por exemplo, "2C" representa uma vírgula. (opcional)
    • lines_terminated_by : O caractere que divide os registros de linha. O valor deste argumento deve estar no formato hexadecimal ASCII . Por exemplo, "0A" representa uma nova linha. (opcional)

    Método HTTP e URL:

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

    Corpo JSON da solicitação:

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

    Para enviar sua solicitação, expanda uma destas opções:

    Você deve receber uma resposta JSON semelhante à seguinte:

    Se sua consulta de seleção especificar um banco de dados, ela substituirá a propriedade databases .

  4. Se você não precisar manter a função do IAM definida anteriormente, revogue -a agora.
Para obter a lista completa de parâmetros para a solicitação, consulte a página instances:export .

Personalize o formato de um arquivo de exportação CSV

Você pode usar gcloud ou a API REST para personalizar o formato do seu arquivo CSV. Ao realizar uma exportação, você pode especificar as seguintes opções de formatação:

Opção CSV Valor padrão sinalizador gcloud Propriedade da API REST Descrição
Escapar

"5C"

Código hexadecimal ASCII para separador de arquivos.

--escape escapeCharacter

Caractere que aparece antes de um caractere de dados que precisa ser escapado.

Disponível somente para MySQL e PostgreSQL.

Citar

"22"

Código hexadecimal ASCII para aspas duplas.

--quote quoteCharacter

Caractere que envolve valores de colunas que têm um tipo de dado string.

Disponível somente para MySQL e PostgreSQL.

Delimitador de campo

"2C"

Código hexadecimal ASCII para vírgula.

--fields-terminated-by fieldsTerminatedBy

Caractere que divide valores de colunas.

Disponível somente para MySQL e PostgreSQL.

Caractere de nova linha

"0A"

Código hexadecimal ASCII para nova linha.

--lines-terminated-by linesTerminatedBy

Caractere que divide registros de linha.

Disponível somente para MySQL.

Por exemplo, um comando gcloud usando todos esses argumentos poderia ser assim:

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"

O corpo da solicitação da API REST equivalente ficaria assim:

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

Os exemplos anteriores gcloud e da API são equivalentes à execução da seguinte instrução SQL:

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

Importar dados para o Cloud SQL para MySQL

Funções e permissões necessárias para importar para o Cloud SQL para MySQL

Para importar dados do Cloud Storage para o Cloud SQL, o usuário que inicia a importação deve ter uma das seguintes funções:

Além disso, a conta de serviço da instância do Cloud SQL deve ter uma das seguintes funções:

  • A função storage.objectAdmin do IAM
  • Uma função personalizada, incluindo as seguintes permissões:
    • storage.objects.get
    • storage.objects.list (para importar arquivos apenas em paralelo)

Para obter ajuda com funções do IAM, consulte Gerenciamento de Identidade e Acesso .

Exporte dados do seu servidor MySQL local para um arquivo CSV

Para exportar uma tabela MySQL para importação no Cloud SQL, recomendamos que você formate o arquivo usando o seguinte 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 '\"' "

Você pode personalizar o formato do seu arquivo de exportação CSV.

Importar dados de um arquivo CSV para o Cloud SQL para MySQL

Requisitos de formato de arquivo CSV

Os arquivos CSV devem ter uma linha para cada linha de dados e usar campos separados por vírgula.

Para importar dados para uma instância do Cloud SQL usando um arquivo CSV:

Console

  1. No Google Cloud console, acesse a página Instâncias do Cloud SQL .

    Acesse Instâncias do Cloud SQL

  2. Para abrir a página Visão geral de uma instância, clique no nome da instância.
  3. Clique em Importar .
  4. Na seção "Escolha o arquivo do qual deseja importar os dados" , insira o caminho para o bucket e o arquivo CSV a serem usados ​​para a importação. Ou navegue até o arquivo:
    1. Clique em Procurar .
    2. Na seção Localização , clique duas vezes no nome do bucket na lista.
    3. Selecione o arquivo na lista.
    4. Clique em Selecionar .

    Você pode importar um arquivo compactado ( .gz ) ou descompactado ( .csv ).

  5. Na seção Formato , selecione CSV .
  6. Especifique o banco de dados e a tabela na sua instância do Cloud SQL para onde você deseja importar o arquivo CSV.
  7. Clique em Importar para iniciar a importação.

gcloud

  1. Crie um bucket do Cloud Storage.
  2. Carregue o arquivo no seu bucket.

    Para obter ajuda com o upload de arquivos para buckets, consulte Upload de objetos .

  3. Carregue dados do arquivo CSV para o bucket.
  4. Identifique a conta de serviço da instância do Cloud SQL da qual você está exportando. Você pode fazer isso executando o comando gcloud sql instances describe com o nome da instância. Procure o campo serviceAccountEmailAddress na saída.
    gcloud sql instances describe INSTANCE_NAME
  5. Copie o campo serviceAccountEmailAddress.
  6. Use gcloud storage buckets add-iam-policy-binding para conceder a função storage.objectAdmin do IAM à conta de serviço da instância do Cloud SQL para o bucket. Para obter ajuda na definição de permissões do IAM, consulte "Usando permissões do IAM" .
  7. Importe o arquivo:
    gcloud sql import csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
    --database=DATABASE_NAME \
    --table=TABLE_NAME

    Para obter informações sobre como usar o comando import csv , consulte a página de referência do comando sql import csv .

  8. Se você não precisar manter as permissões do IAM definidas anteriormente, remova-as usando gcloud storage buckets remove-iam-policy-binding .

REST v1

  1. Crie um bucket do Cloud Storage.
  2. Carregue o arquivo no seu bucket.

    Para obter ajuda com o upload de arquivos para buckets, consulte Upload de objetos .

  3. Forneça à sua instância as funções do IAM legacyBucketWriter e objectViewer para o seu bucket. Para obter ajuda na definição de permissões do IAM, consulte Usando permissões do IAM .
  4. Importe o arquivo:

    Antes de usar qualquer um dos dados solicitados, faça as seguintes substituições:

    • project-id : O ID do projeto
    • instance-id : O ID da instância
    • bucket_name : O nome do bucket do Cloud Storage
    • path_to_csv_file : O caminho para o arquivo CSV
    • database_name : O nome de um banco de dados dentro da instância do Cloud SQL
    • table_name : O nome da tabela do banco de dados
    • escape_character : O caractere que deve aparecer antes de um caractere de dados que precisa ser escapado. O valor deste argumento deve ser um caractere em código ASCII hexadecimal. Por exemplo, "22" representa aspas duplas. (opcional)
    • quote_character : O caractere que delimita valores de colunas que possuem um tipo de dado string. O valor deste argumento deve ser um caractere em código ASCII hexadecimal. Por exemplo, "22" representa aspas duplas. (opcional)
    • fields_terminated_by : O caractere que divide os valores da coluna. O valor deste argumento deve ser um caractere em código ASCII hexadecimal. Por exemplo, "2C" representa uma vírgula. (opcional)
    • lines_terminated_by : O caractere que divide os registros de linha. O valor deste argumento deve ser um caractere em código ASCII hexadecimal. Por exemplo, "0A" representa uma nova linha. (opcional)

    Método HTTP e URL:

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

    Corpo JSON da solicitação:

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

    Para enviar sua solicitação, expanda uma destas opções:

    Você deve receber uma resposta JSON semelhante à seguinte:

    Para obter a lista completa de parâmetros para a solicitação, consulte a página instances:import .
  5. Se você não precisar manter as permissões do IAM definidas anteriormente, remova-as.

REST v1beta4

  1. Crie um bucket do Cloud Storage.
  2. Carregue o arquivo no seu bucket.

    Para obter ajuda com o upload de arquivos para buckets, consulte Upload de objetos .

  3. Forneça à sua instância a função storage.objectAdmin do IAM para o seu bucket. Para obter ajuda na definição de permissões do IAM, consulte "Usando permissões do IAM" .
  4. Importe o arquivo:

    Antes de usar qualquer um dos dados solicitados, faça as seguintes substituições:

    • project-id : O ID do projeto
    • instance-id : O ID da instância
    • bucket_name : O nome do bucket do Cloud Storage
    • path_to_csv_file : O caminho para o arquivo CSV
    • database_name : O nome de um banco de dados dentro da instância do Cloud SQL
    • table_name : O nome da tabela do banco de dados
    • escape_character : O caractere que deve aparecer antes de um caractere de dados que precisa ser escapado. O valor deste argumento deve estar no formato hexadecimal ASCII . Por exemplo, "22" representa aspas duplas. (opcional)
    • quote_character : O caractere que delimita valores de colunas que possuem um tipo de dado string. O valor deste argumento deve estar no formato hexadecimal ASCII . Por exemplo, "22" representa aspas duplas. (opcional)
    • fields_terminated_by : O caractere que divide os valores da coluna. O valor deste argumento deve estar no formato hexadecimal ASCII . Por exemplo, "2C" representa uma vírgula. (opcional)
    • lines_terminated_by : O caractere que divide os registros de linha. O valor deste argumento deve estar no formato hexadecimal ASCII . Por exemplo, "0A" representa uma nova linha. (opcional)

    Método HTTP e URL:

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

    Corpo JSON da solicitação:

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

    Para enviar sua solicitação, expanda uma destas opções:

    Você deve receber uma resposta JSON semelhante à seguinte:

    Para obter a lista completa de parâmetros para a solicitação, consulte a página instances:import .
  5. Se você não precisar manter as permissões do IAM definidas anteriormente, remova-as.

Personalize o formato de um arquivo CSV para o Cloud SQL para MySQL

Você pode usar gcloud ou a API REST para personalizar o formato do arquivo CSV.

Segue um exemplo de comando gcloud :

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"

O corpo da solicitação da API REST equivalente ficaria assim:

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

Os exemplos anteriores gcloud e da API são equivalentes à execução da seguinte instrução SQL:

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

Se você receber um erro como ERROR_RDBMS , verifique se a tabela existe. Se a tabela existir, confirme se você tem as permissões corretas no bucket. Para obter ajuda na configuração do controle de acesso no Cloud Storage, consulte Criar e gerenciar listas de controle de acesso .

Para ver como a solicitação da API REST subjacente é construída para esta tarefa, consulte o APIs Explorer na página instances:import .

O que vem a seguir