Exporte e importe através de ficheiros CSV

Esta página descreve a exportação e a importação de dados para instâncias do Cloud SQL através de ficheiros CSV.

Antes de começar

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

  • Certifique-se de que a sua base de dados tem espaço livre adequado.
  • As operações de exportação e importação usam recursos da base de dados, mas não interferem com as operações normais da base de dados, a menos que a instância tenha um aprovisionamento insuficiente.

  • Verifique se o ficheiro CSV tem os dados esperados e se está no formato correto. Os ficheiros CSV têm de ter uma linha para cada linha de campos de dados.
  • Siga as práticas recomendadas para exportar e importar dados.

Exporte dados do Cloud SQL para PostgreSQL

Funções e autorizações necessárias para exportar do Cloud SQL para PostgreSQL

Para exportar dados do Cloud SQL para o Cloud Storage, o utilizador que inicia a exportação tem de ter uma das seguintes funções:

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

  • A storage.objectAdminfunção de gestão de identidade e de acesso (IAM)
  • Uma função personalizada, incluindo as seguintes autorizações:
    • storage.objects.create
    • storage.objects.list (apenas para exportar ficheiros em paralelo)
    • storage.objects.delete (apenas para exportar ficheiros em paralelo)

Para obter ajuda com as funções de IAM, consulte o Identity and Access Management.

Exporte dados para um ficheiro CSV a partir do Cloud SQL para PostgreSQL

Pode exportar os seus dados no formato CSV, que é utilizável por outras ferramentas e ambientes. As exportações ocorrem ao nível da base de dados. Durante uma exportação CSV, pode especificar os esquemas a exportar. Todos os esquemas ao nível da base de dados são elegíveis para exportação.

Para exportar dados de uma base de dados numa instância do Cloud SQL para um ficheiro CSV num contentor do Cloud Storage:

Consola

  1. Na Trusted Cloud consola, aceda à página Instâncias do Cloud SQL.

    Aceda a Instâncias do Cloud SQL

  2. Para abrir a página Vista geral de uma instância, clique no nome da instância.
  3. Clique em Exportar.
  4. Selecione Exportação de transferência para permitir que outras operações ocorram enquanto a exportação está em curso.
  5. Na secção Localização de exportação do Cloud Storage, adicione o nome do contentor, da pasta e do ficheiro que quer exportar ou clique em Procurar para encontrar ou criar um contentor, uma pasta ou um ficheiro.

    Se clicar em Procurar:

    1. Na secção Localização, selecione um contentor ou uma pasta do Cloud Storage para a exportação.
    2. Na caixa Nome, adicione um nome para o ficheiro CSV ou selecione um ficheiro existente na lista na secção Localização.

      Pode usar uma extensão de ficheiro .gz (a extensão completa seria .csv.gz) para comprimir o ficheiro de exportação.

    3. Clique em Selecionar.
  6. Na secção Formato, clique em CSV.
  7. Na secção Base de dados para exportação, selecione o nome da base de dados no menu pendente.
  8. Para Consulta SQL, introduza uma consulta SQL para especificar a tabela a partir da qual exportar dados.

    Por exemplo, para exportar todo o conteúdo da tabela entries na base de dados guestbook, introduza

    SELECT * FROM guestbook.entries;
    A sua consulta tem de especificar uma tabela na base de dados especificada. Não pode exportar uma base de dados completa no formato CSV.

  9. Clique em Exportar para iniciar a exportação.
  10. A caixa Exportar base de dados? é aberta com uma mensagem a indicar que o processo de exportação pode demorar uma hora ou mais para bases de dados grandes. Durante a exportação, a única operação que pode realizar na instância é ver informações. Depois de iniciar a exportação, pode cancelar a operação. Se for uma boa altura para iniciar uma exportação, clique em Exportar. Caso contrário, clique em Cancelar.

gcloud

  1. Crie um contentor do Cloud Storage.
  2. Carregue o ficheiro para o seu contentor.

    Para obter ajuda com o carregamento de ficheiros para contentores, consulte o artigo Carregar objetos.

  3. Encontre a conta de serviço da instância do Cloud SQL a partir da qual está a fazer a exportação. Pode fazê-lo executando o comando gcloud sql instances describe. Procure o campo serviceAccountEmailAddress no resultado.
    gcloud sql instances describe INSTANCE_NAME
  4. Use gcloud storage buckets add-iam-policy-binding para conceder a storage.objectAdmin função do IAM à conta de serviço da instância do Cloud SQL. Para obter ajuda com a definição de autorizações de IAM, consulte o artigo Usar autorizações de IAM.
  5. Exporte a base 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 a utilização do comando export csv, consulte a página de referência do comando sql export csv

  6. Se não precisar de manter a função do IAM que definiu anteriormente, revogue-a agora.

REST v1

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

    Este passo não é obrigatório, mas é vivamente recomendado para não abrir o acesso a outros dados.

  2. Disponibilize à sua instância a legacyBucketWriter função de IAM para o seu contentor. Para obter ajuda com a definição de autorizações de IAM, consulte o artigo Usar autorizações de IAM.
  3. Exporte a sua base de dados:

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

    • project-id: o ID do projeto
    • instance-id: o ID da instância
    • bucket_name: o nome do contentor do Cloud Storage
    • path_to_csv_file: o caminho para o ficheiro CSV
    • database_name: o nome de uma base de dados na instância do Cloud SQL
    • offload: ativa 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 caráter que deve aparecer antes de um caráter de dados que tem de ser ignorado. O valor deste argumento tem de ser um carater no código ASCII hexadecimal. Por exemplo, "22" representa as aspas duplas. (opcional)
    • quote_character:o caráter que inclui valores de colunas com um tipo de dados de string. O valor deste argumento tem de ser um carater no código ASCII hexadecimal. Por exemplo, "22" representa as aspas duplas. (opcional)
    • fields_terminated_by: o caráter que divide os valores das colunas. O valor deste argumento tem de ser um carater no código ASCII hexadecimal. Por exemplo, "2C" representa uma vírgula. (opcional)
    • lines_terminated_by: o caráter que divide os registos de linhas. O valor deste argumento tem de ser um carater no 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 do pedido:

    {
     "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 o seu pedido, expanda uma destas opções:

    Deve receber uma resposta JSON semelhante à seguinte:

    Tem de especificar exatamente uma base de dados com a propriedade databases e, se a consulta de seleção especificar uma base de dados, tem de ser a mesma.

  4. Se não precisar de manter as autorizações de IAM que definiu anteriormente, remova-as agora.
Para ver a lista completa de parâmetros do pedido, consulte a página instances:export.

REST v1beta4

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

    Este passo não é obrigatório, mas é vivamente recomendado para não abrir o acesso a outros dados.

  2. Disponibilize à sua instância a storage.objectAdmin função de IAM para o seu contentor. Para obter ajuda com a definição de autorizações de IAM, consulte o artigo Usar autorizações de IAM.
  3. Exporte a sua base de dados:

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

    • project-id: o ID do projeto
    • instance-id: o ID da instância
    • bucket_name: o nome do contentor do Cloud Storage
    • path_to_csv_file: o caminho para o ficheiro CSV
    • database_name: o nome de uma base de dados na instância do Cloud SQL
    • offload: ativa 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 caráter que deve aparecer antes de um caráter de dados que tem de ser ignorado. O valor deste argumento tem de estar no formato hexadecimal ASCII. Por exemplo, "22" representa as aspas duplas. (opcional)
    • quote_character: o caráter que inclui valores de colunas com um tipo de dados de string. O valor deste argumento tem de estar no formato hexadecimal ASCII. Por exemplo, "22" representa as aspas duplas. (opcional)
    • fields_terminated_by: o caráter que divide os valores das colunas. O valor deste argumento tem de estar no formato hexadecimal ASCII. Por exemplo, "2C" representa uma vírgula. (opcional)
    • lines_terminated_by: o caráter que divide os registos de linhas. O valor deste argumento tem de 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 do pedido:

    {
     "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 o seu pedido, expanda uma destas opções:

    Deve receber uma resposta JSON semelhante à seguinte:

    Tem de especificar exatamente uma base de dados com a propriedade databases e, se a consulta de seleção especificar uma base de dados, tem de ser a mesma.

  4. Se não precisar de manter a função do IAM que definiu anteriormente, revogue-a agora.
Para ver a lista completa de parâmetros do pedido, consulte a página instances:export.

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

Pode usar gcloud ou a API REST para personalizar o formato do ficheiro CSV. Quando faz uma exportação, pode especificar as seguintes opções de formatação:

Opção CSV Valor predefinido flag gcloud Propriedade da API REST Descrição
Escape

"5C"

Código hexadecimal ASCII para o separador de ficheiros.

--escape escapeCharacter

Caráter que aparece antes de um caráter de dados que tem de ser ignorado.

Disponível apenas para MySQL e PostgreSQL.

Citação

"22"

Código hexadecimal ASCII para aspas duplas.

--quote quoteCharacter

Carater que inclui valores de colunas com um tipo de dados de string.

Disponível apenas para MySQL e PostgreSQL.

Delimitador de campo

"2C"

Código hexadecimal ASCII para vírgula.

--fields-terminated-by fieldsTerminatedBy

Caráter que divide os valores das colunas.

Disponível apenas para MySQL e PostgreSQL.

Caráter de nova linha

"0A"

Código hexadecimal ASCII para nova linha.

--lines-terminated-by linesTerminatedBy

Caráter que divide os registos de linhas.

Disponível apenas para o MySQL.

Por exemplo, um comando gcloud que use todos estes argumentos pode ser semelhante ao seguinte:

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 do pedido da API REST equivalente teria o seguinte aspeto:

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

A exportação de CSV cria um resultado CSV padrão por predefinição. Se precisar de ainda mais opções do que o Cloud SQL oferece, pode usar a seguinte declaração num cliente 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]');

Importe dados para o Cloud SQL para PostgreSQL

Funções e autorizações necessárias para a importação para o Cloud SQL para PostgreSQL

Para importar dados do Cloud Storage para o Cloud SQL, o utilizador que inicia a importação tem de ter uma das seguintes funções:

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

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

Para obter ajuda com as funções de IAM, consulte o Identity and Access Management.

Importe dados de um ficheiro CSV para o Cloud SQL para PostgreSQL

Requisitos de formato de ficheiro CSV

Os ficheiros CSV têm de ter uma linha para cada linha de dados e usar campos separados por vírgulas.

Para importar dados para uma instância do Cloud SQL através de um ficheiro CSV:

Consola

  1. Na Trusted Cloud consola, aceda à página Instâncias do Cloud SQL.

    Aceda a Instâncias do Cloud SQL

  2. Para abrir a página Vista geral de uma instância, clique no nome da instância.
  3. Clique em Importar.
  4. Na secção Selecionar ficheiro de origem, introduza o caminho para o contentor e o ficheiro CSV ou carregue um ficheiro CSV local para usar na importação. Para procurar o ficheiro:
    1. Clique em Procurar.
    2. Na secção Localização, clique duas vezes no nome do contentor na lista.
    3. Selecione o ficheiro na lista.
    4. Clique em Selecionar.

    Pode importar um ficheiro comprimido (.gz) ou não comprimido (.csv).

  5. Na secção Formato, selecione CSV.
  6. Especifique a base de dados e a tabela na instância do Cloud SQL onde quer importar o ficheiro CSV.
  7. Opcionalmente, pode especificar um utilizador para a operação de importação.
  8. Clique em Importar para iniciar a importação.

gcloud

  1. Crie um contentor do Cloud Storage.
  2. Carregue o ficheiro para o seu contentor.

    Para obter ajuda com o carregamento de ficheiros para contentores, consulte o artigo Carregar objetos.

  3. Carregue dados do ficheiro CSV para o contentor.
  4. Identifique a conta de serviço da instância do Cloud SQL a partir da qual está a fazer a exportação. Pode fazê-lo executando o comando gcloud sql instances describe com o nome da instância. Procure o campo serviceAccountEmailAddress no resultado.
    gcloud sql instances describe INSTANCE_NAME
  5. Copie o campo serviceAccountEmailAddress.
  6. Use gcloud storage buckets add-iam-policy-binding para conceder a storage.objectAdmin função do IAM à conta de serviço da instância do Cloud SQL para o contentor. Para obter ajuda com a definição de autorizações de IAM, consulte o artigo Usar autorizações de IAM.
  7. Importe o ficheiro:
    gcloud sql import csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
    --database=DATABASE_NAME \
    --table=TABLE_NAME

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

  8. Se não precisar de manter as autorizações de IAM que definiu anteriormente, remova-as através de gcloud storage buckets remove-iam-policy-binding.

REST v1

  1. Crie um contentor do Cloud Storage.
  2. Carregue o ficheiro para o seu contentor.

    Para obter ajuda com o carregamento de ficheiros para contentores, consulte o artigo Carregar objetos.

  3. Faculte à sua instância as funções de IAM legacyBucketWritereobjectViewer para o seu contentor. Para obter ajuda com a definição de autorizações de IAM, consulte o artigo Usar autorizações de IAM.
  4. Importe o ficheiro:

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

    • project-id: o ID do projeto
    • instance-id: o ID da instância
    • bucket_name: o nome do contentor do Cloud Storage
    • path_to_csv_file: o caminho para o ficheiro CSV
    • database_name: o nome de uma base de dados na instância do Cloud SQL
    • table_name: o nome da tabela da base de dados
    • escape_character: o caráter que deve aparecer antes de um caráter de dados que tem de ser ignorado. O valor deste argumento tem de ser um carater no código ASCII hexadecimal. Por exemplo, "22" representa as aspas duplas. (opcional)
    • quote_character: o caráter que inclui valores de colunas com um tipo de dados de string. O valor deste argumento tem de ser um carater no código ASCII hexadecimal. Por exemplo, "22" representa as aspas duplas. (opcional)
    • fields_terminated_by: o caráter que divide os valores das colunas. O valor deste argumento tem de ser um carater no código ASCII hexadecimal. Por exemplo, "2C" representa uma vírgula. (opcional)
    • lines_terminated_by: o caráter que divide os registos de linhas. O valor deste argumento tem de ser um carater no 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 do pedido:

    {
     "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 o seu pedido, expanda uma destas opções:

    Deve receber uma resposta JSON semelhante à seguinte:

    Para ver a lista completa de parâmetros do pedido, consulte a página instances:import.
  5. Se não precisar de manter as autorizações de IAM que definiu anteriormente, remova-as.

REST v1beta4

  1. Crie um contentor do Cloud Storage.
  2. Carregue o ficheiro para o seu contentor.

    Para obter ajuda com o carregamento de ficheiros para contentores, consulte o artigo Carregar objetos.

  3. Faculte à sua instância a storage.objectAdmin função do IAM para o seu contentor. Para obter ajuda com a definição de autorizações de IAM, consulte o artigo Usar autorizações de IAM.
  4. Importe o ficheiro:

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

    • project-id: o ID do projeto
    • instance-id: o ID da instância
    • bucket_name: o nome do contentor do Cloud Storage
    • path_to_csv_file: o caminho para o ficheiro CSV
    • database_name: o nome de uma base de dados na instância do Cloud SQL
    • table_name: o nome da tabela da base de dados
    • escape_character: o caráter que deve aparecer antes de um caráter de dados que tem de ser ignorado. O valor deste argumento tem de estar no formato hexadecimal ASCII. Por exemplo,"22" representa as aspas duplas. (opcional)
    • quote_character: o caráter que inclui valores de colunas com um tipo de dados de string. O valor deste argumento tem de estar no formato hexadecimal ASCII. Por exemplo, "22" representa as aspas duplas. (opcional)
    • fields_terminated_by: o caráter que divide os valores das colunas. O valor deste argumento tem de estar no formato hexadecimal ASCII. Por exemplo, "2C" representa uma vírgula. (opcional)
    • lines_terminated_by: o caráter que divide os registos de linhas. O valor deste argumento tem de 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 do pedido:

    {
     "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 o seu pedido, expanda uma destas opções:

    Deve receber uma resposta JSON semelhante à seguinte:

    Para ver a lista completa de parâmetros do pedido, consulte a página instances:import.
  5. Se não precisar de manter as autorizações de IAM que definiu anteriormente, remova-as.

Personalize o formato de um ficheiro CSV para o Cloud SQL para PostgreSQL

Pode usar gcloud ou a API REST para personalizar o formato do ficheiro CSV.

Segue-se 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 do pedido da API REST equivalente teria o seguinte aspeto:

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

Se receber um erro, como ERROR_RDBMS, certifique-se de que a tabela existe. Se a tabela existir, confirme que tem as autorizações corretas no contentor. Para obter ajuda na configuração do controlo de acesso no Cloud Storage, consulte o artigo Crie e faça a gestão de listas de controlo de acesso.

Para ver como o pedido da API REST subjacente é construído para esta tarefa, consulte o Explorador de APIs na página instances:import.

O que se segue?