Importe um ficheiro CSV

Esta página descreve como importar dados de um ficheiro CSV armazenado num contentor do Cloud Storage para um cluster do AlloyDB for PostgreSQL.

Pode cancelar a importação de dados para clusters do AlloyDB. Para mais informações, consulte o artigo Cancele uma operação de importação.

Antes de começar

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

  • Certifique-se de que a sua base de dados tem espaço livre adequado.
  • As operações de importação usam recursos da base de dados, mas não interferem com as operações normais da base de dados, a menos que o cluster tenha recursos insuficientes.

Funções e autorizações necessárias para a importação para clusters do AlloyDB

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

Além disso, a conta de serviço do cluster do AlloyDB tem de ter uma das seguintes funções:

  • A função de IAM storage.objectViewer
  • Uma função personalizada, incluindo as seguintes autorizações:
    • storage.objects.get

Para obter ajuda com as funções de IAM, consulte o artigo Gestão de identidade e de acesso.

Importe dados de um ficheiro CSV para clusters do AlloyDB

  • A base de dados e a tabela para as quais está a importar têm de existir no cluster do AlloyDB. Para obter ajuda na criação de uma base de dados, consulte o artigo Crie uma base de dados.
  • 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 um cluster do AlloyDB através de um ficheiro CSV, siga estes passos:

gcloud

  1. Crie um contentor do Cloud Storage.
  2. Carregue o ficheiro CSV para o seu contentor. Para obter ajuda com o carregamento de ficheiros para contentores, consulte o artigo Carregar objetos.
  3. Use o comando gcloud storage buckets add-iam-policy-binding para conceder a storage.objectViewer função do IAM à conta de serviço do AlloyDB para o contentor.

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

    Para obter ajuda com a definição de autorizações de IAM, consulte o artigo Usar autorizações de IAM.

  4. Importe o ficheiro:

    gcloud alloydb clusters import CLUSTER_NAME --region=REGION --gcs-uri=gs://BUCKET_NAME/FILE_NAME --database=DATABASE_NAME --user=USER --csv --table=TABLE_NAME

    Faça as seguintes substituições:

    • CLUSTER_NAME: o nome do cluster.
    • REGION: a região na qual o cluster do AlloyDB está implementado.
    • BUCKET_NAME: o nome do contentor do Cloud Storage.
    • FILE_NAME: o nome do ficheiro CSV.
    • DATABASE_NAME: o nome de uma base de dados no cluster.
    • USER: o utilizador para a operação de importação.
    • TABLE_NAME: a tabela na base de dados.

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

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

REST v1

  1. Crie um contentor do Cloud Storage.
  2. Carregue o ficheiro CSV para o seu contentor. Para obter ajuda com o carregamento de ficheiros para contentores, consulte o artigo Carregar objetos.
  3. Conceda autorizações da conta de serviço ao contentor do Cloud Storage para a operação de importação. Use o formato de conta de serviço para identificar a conta de serviço do projeto para o qual está a fazer a importação. O formato da conta de serviço é o seguinte:

    service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com
  4. Use gcloud storage buckets add-iam-policy-binding para conceder a storage.objectViewer função do IAM à conta de serviço do cluster do AlloyDB para o contentor. Para obter ajuda com a definição de autorizações de IAM, consulte o artigo Usar autorizações de IAM.

  5. Importe o ficheiro.

    Use o seguinte método HTTP e URL:

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

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

    • PROJECT_ID: o ID do projeto.
    • LOCATION_ID: a região na qual o cluster do AlloyDB está implementado.
    • CLUSTER_ID: o ID do cluster.
    • BUCKET_NAME: o nome do contentor do Cloud Storage.
    • PATH_TO_CSV_FILE: o caminho para o ficheiro CSV.
    • USER: o utilizador para a operação de importação.
    • DATABASE_NAME: o nome de uma base de dados no cluster do AlloyDB.
    • TABLE_NAME: a tabela na base de dados.
    • COLUMNS (Opcional): as colunas a importar.
    • ESCAPE_CHARACTER (Opcional): o caráter que tem de aparecer antes de um caráter de dados que tem de ser ignorado. O valor deste argumento tem de ser um caráter no código ASCII hexadecimal. Por exemplo, 22 representa uma aspa dupla.
    • QUOTE_CHARACTER (Opcional): 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 uma marca de aspas duplas.
    • FIELD_DELIMITER (Opcional): o caráter que divide os valores das colunas. O valor deste argumento tem de ser um caráter no código ASCII hexadecimal. Por exemplo, 2C representa uma vírgula.

    Corpo JSON do pedido:

    {
      "gcsUri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE",
      "database": "DATABASE_NAME",
      "user": "USER",
      "csvImportOptions": {
        "table": "TABLE_NAME",
        "columns": ["COLUMN1", "COLUMN2"],
        "fieldDelimiter": "FIELD_DELIMITER",
        "quoteCharacter": "QUOTE_CHARACTER",
        "escapeCharacter": "ESCAPE_CHARACTER"
      }
    }
    

    Para enviar o seu pedido, expanda uma destas opções:

    curl (Linux, macOS ou Cloud Shell)

    Guarde o corpo do pedido num ficheiro com o nome request.json e execute o seguinte comando:

       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/LOCATION_ID/clusters/CLUSTER_ID:import"
    

    PowerShell (Windows)

    Guarde o corpo do pedido num ficheiro com o nome request.json e execute o seguinte comando:

    $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/LOCATION_ID/clusters/CLUSTER_ID:import"| Select-Object -Expand Content
    

    Recebe uma resposta JSON semelhante à seguinte:

    Resposta

    {
     "name": "projects/PROJECT_ID/locations/LOCATION_ID/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/location-id/clusters/target-cluster",
      "verb": "import",
      "requestedCancellation": false,
      "apiVersion": "v1"
     },
     "done": false
    }
    
  6. 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 clusters:import.

Personalize o formato CSV e importe o ficheiro

Pode personalizar o formato CSV e importar o ficheiro quando o ficheiro CSV contém um delimitador de campo, ou carateres de aspas ou de escape não predefinidos. Para importar um ficheiro CSV com um formato não predefinido, tem de fornecer as mesmas opções de formatação no pedido.

Use os seguintes exemplos da CLI gcloud e da API REST para ajudar a personalizar o formato do ficheiro CSV.

gcloud

gcloud alloydb clusters import CLUSTER_NAME --region=REGION --database=DATABASE_NAME --gcs-uri='gs://BUCKET_NAME/PATH_TO_CSV_FILE' --user=USERNAME --table=TABLE_NAME --columns=COLUMNS --field-delimiter='2C' --quote-character='22' --escape-character='5C' --csv

REST v1

O corpo do pedido da API REST equivalente é semelhante ao seguinte:

{
 "gcsUri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE",
 "database": "DATABASE_NAME",
 "user": "USER",
 "csvImportOptions": {
     "table": "TABLE_NAME",
     "columns": ["COLUMN1", "COLUMN2"],
     "escapeCharacter": "5C",
     "quoteCharacter": "22",
     "fieldDelimiter": "2C",
 }
}

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

Se receber um erro como INVALID_ARGUMENT, 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 Criar e gerir listas de controlo de acesso.

Verifique o estado de uma operação de importação

Para verificar o estado de uma operação de importação, siga estes passos:

gcloud

Execute o seguinte comando com gcloud alloydb operations describe:

gcloud alloydb operations describe OPERATION_ID --region=REGION

O estado destas operações encontra-se no campo STATUS.

Também pode listar os detalhes de uma operação específica ou cancelar uma operação específica. Para mais informações sobre este comando, consulte a gcloud alloydb operations página de referência de comandos.

REST v1

Use o método GET e o seguinte URL:

GET https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID

Para mais informações, consulte get.

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

  • REGION: a região na qual o cluster do AlloyDB está implementado.
  • PROJECT_ID: o ID do projeto.
  • OPERATION_ID: o ID da operação de importação. Para mais informações, consulte a secção Antes de começar.

Para enviar o seu pedido, expanda uma destas opções:

curl (Linux, macOS ou Cloud Shell)

Execute o seguinte comando:

  curl -X GET \
       -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID
 

PowerShell (Windows)

Execute o seguinte comando:

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

Invoke-WebRequest `
  -Method GET `
  -Headers $headers `
  -Uri "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID | Select-Object -Expand Content

Recebe uma resposta JSON semelhante à seguinte:

Se for bem-sucedido, o corpo da resposta contém uma instância de Operation.

O que se segue?