创建外部表

BigQuery Omni 不管理存储在 Amazon S3 中的数据。如需访问 S3 数据,请定义外部表。

如需创建外部表,请按以下步骤操作:

控制台

  1. 在 Cloud Console 中打开 BigQuery 页面。

    转到 BigQuery 页面

  2. 在导航面板的资源部分中,展开您的项目并选择数据集。

  3. 在详细信息面板中,点击创建表

    创建表

  4. 创建表页面的来源部分,执行以下操作:

    • 基于以下数据创建表部分,选择 Amazon S3
    • 选择 S3 路径部分,使用 s3://BUCKET_NAME/PATH 格式输入指向 S3 数据的 URI。将 BUCKET_NAME 替换为 S3 存储分区的名称;存储分区所在的地区应与数据集所在的地区相同。将 PATH 替换为您要将导出的文件写入其中的路径;它可以包含一个通配符 *
    • 文件格式部分,选择 S3 中的数据格式。支持的格式为 AVROPARQUETORCCSVNEWLINE_DELIMITED_JSONGoogle Sheets
  5. 创建表页面的目标部分,执行以下操作:

    • 数据集名称部分,选择相应数据集。

      选择数据集

    • 表名称字段中,输入您要创建的表的名称。

    • 验证表类型设置为外部表

    • 连接 ID 部分,从下拉列表中选择适当的连接 ID。

  6. 点击创建表

bq

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

替换以下内容:

  • DATA_FORMAT:任何受支持的 BigQuery 联合格式(例如 AVROPARQUET)。
  • S3_URI:指向 S3 数据的 URI(例如 s3://bucket/path)。
  • AWS_LOCATION:Google Cloud 中的 AWS 位置(例如 aws-us-east-1)。
  • CONNECTION_NAME:您创建的连接的名称。
  • DATASET_NAME:您创建的数据集的名称。
  • TABLE_NAME:您要为此表指定的名称。

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());
    }
  }
}

后续步骤