如何使用API​​使用Google Cloud Storage中存储的架构文件在BigQuery加载作业上设置架构?

时间:2018-07-20 14:15:44

标签: google-cloud-platform google-bigquery google-cloud-storage

我创建了一个python脚本,用于从Google Cloud Storage存储桶中提取JSON文件并将其加载到数据集中。 我在尝试指定与文本文件位于同一存储桶中的架构时遇到问题

我的架构文件是一个txt文件,格式为Attribute:DataType,Attribute:DataType

这就是我所拥有的

job_config = bigquery.LoadJobConfig()

schema_uri = 'gs://<bucket-name>/FlattenedProduct_schema.txt'
schema = schema_uri
job_config.schema = schema    
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON
uri = 'gs://<bucket-name>/FlattenedProduct_JSON.txt'

load_job = client.load_table_from_uri(
    uri,
    dataset_ref.table('us_states'),
    location='US',  # Location must match that of the destination dataset.
    job_config=job_config)  # API request

2 个答案:

答案 0 :(得分:0)

您需要自己阅读文本文件,并将其转换为所需的格式schema,即List[google.cloud.bigquery.schema.SchemaField] – Schema of the destination table.

所需架构的示例:

from google.cloud.bigquery import SchemaField

schem = [
     SchemaField('field1','STRING'),
     SchemaField('field2', 'INTEGER'),
     SchemaField('value', 'FLOAT')
    ]

答案 1 :(得分:0)

从给定的代码中,您从存储桶中调用了txt文件,但是您将源格式用作JSON(SourceFormat.NEWLINE_DELIMITED_JSON)。您可以查看这些行以查看其是否有效。

job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON
uri = 'gs://<bucket-name>/FlattenedProduct_JSON.txt'

或者,作为一种解决方法,您也可以尝试使用以下命令从本地计算机或GCS调用JSON格式的文件。以下命令在加载数据时指定架构。

bq --location=[LOCATION] load --source_format=[FORMAT] [PROJECT_ID]:[DATASET].[TABLE] [PATH_TO_DATA_FILE] [PATH_TO_SCHEMA_FILE]

位置:

[LOCATION]是您的位置的名称。如果您的数据位于美国或欧盟多区域位置,则--location标志是可选的。例如,如果您在东京地区使用BigQuery,则将标志的值设置为asia-northeast1。您可以使用.bigqueryrc文件为该位置设置默认值。

[FORMAT]是NEWLINE_DELIMITED_JSON或CSV。

[PROJECT_ID]是您的项目ID。

[DATASET]是包含要向其中加载数据的表的数据集。

[TABLE]是您要向其中加载数据的表的名称。

[PATH_TO_DATA_FILE]是本地计算机上或Google Cloud Storage中CSV或JSON数据文件的位置。

[SCHEMA_FILE]是本地计算机上架构文件的路径。

或者,您也可以在API中指定架构。

  • 要在加载数据时指定架构,请调用jobs.insert方法并配置configuration.load.schema属性。在jobReference部分的location属性中指定您的地区。
  • 要在创建表时指定模式,请调用table.insert方法并使用schema属性在表资源中配置模式。

请单击here查看这些选项的详细信息。