Criar uma tabela externa

O BigQuery Omni não gerencia dados armazenados no Amazon S3. Para acessar os dados do S3, defina uma tabela externa.

Para criar uma tabela externa, siga estas etapas:

Console do Google Cloud

  1. Abra a página do BigQuery no Console do Google Cloud.

    Acesse a página do BigQuery

  2. Na seção Recursos do painel de navegação, amplie o projeto e selecione um conjunto de dados.

  3. No painel de detalhes, clique em Criar tabela.

    Criar tabela

  4. Na página Criar tabela, na seção Origem, faça o seguinte:

    • Em Criar tabela de, selecione Amazon S3.
    • Em Selecione o caminho S3, insira um URI que aponte para os dados do S3 no formato s3://BUCKET_NAME/PATH. Substitua BUCKET_NAME pelo nome do bucket do S3. A região do bucket precisa ser a mesma do conjunto de dados. Substitua PATH pelo caminho em que você quer gravar o arquivo exportado. Ele pode conter um caractere curinga *.
    • Em Formato do arquivo, selecione o formato de dados em S3. Os formatos compatíveis são AVRO, PARQUET, ORC, CSV, NEWLINE_DELIMITED_JSON e Google Sheets.
  5. Na seção Destino da página Criar tabela, faça o seguinte:

    • Em Nome do conjunto de dados, escolha o conjunto apropriado.

      Escolher conjunto de dados

    • No campo Nome da tabela, insira o nome da tabela que você está criando.

    • Verifique se o Tipo de tabela está definido como Tabela externa.

    • Em ID da conexão, escolha o ID apropriado na lista suspensa.

  6. Clique em Criar tabela.

bq

bq mk \
--external_table_definition=DATA_FORMAT=
S3_URI@AWS_LOCATION.CONNECTION_NAME \
DATASET_NAME.TABLE_NAME

Substitua:

  • DATA_FORMAT: qualquer um dos formatos federados do BigQuery compatíveis, como AVRO ou PARQUET.
  • S3_URI: um URI que aponta para os dados do S3 (por exemplo, s3://bucket/path).
  • AWS_LOCATION: um local da AWS no Google Cloud (por exemplo, aws-us-east-1).
  • CONNECTION_NAME: o nome da conexão que você criou.
  • DATASET_NAME: o nome do conjunto de dados que você criou.
  • TABLE_NAME: o nome que você quer dar a esta tabela.

Java

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.CsvOptions;
import com.google.cloud.bigquery.ExternalTableDefinition;
import com.google.cloud.bigquery.Field;
import com.google.cloud.bigquery.Schema;
import com.google.cloud.bigquery.StandardSQLTypeName;
import com.google.cloud.bigquery.TableId;
import com.google.cloud.bigquery.TableInfo;

// Sample to create an external aws table
public class CreateExternalTableAws {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String connectionId = "MY_CONNECTION_ID";
    String sourceUri = "s3://your-bucket-name/";
    CsvOptions options = CsvOptions.newBuilder().setSkipLeadingRows(1).build();
    Schema schema =
        Schema.of(
            Field.of("name", StandardSQLTypeName.STRING),
            Field.of("post_abbr", StandardSQLTypeName.STRING));
    ExternalTableDefinition externalTableDefinition =
        ExternalTableDefinition.newBuilder(sourceUri, options)
            .setConnectionId(connectionId)
            .setSchema(schema)
            .build();
    createExternalTableAws(projectId, datasetName, tableName, externalTableDefinition);
  }

  public static void createExternalTableAws(
      String projectId,
      String datasetName,
      String tableName,
      ExternalTableDefinition externalTableDefinition) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId tableId = TableId.of(projectId, datasetName, tableName);
      TableInfo tableInfo = TableInfo.newBuilder(tableId, externalTableDefinition).build();

      bigquery.create(tableInfo);
      System.out.println("Aws external table created successfully");

      // Clean up
      bigquery.delete(TableId.of(projectId, datasetName, tableName));
    } catch (BigQueryException e) {
      System.out.println("Aws external was not created." + e.toString());
    }
  }
}

A seguir