我创建了一个python脚本来从Google Cloud Storage存储桶中获取JSON文件并将其加载到数据集中。我在尝试指定与文本文件位于同一个存储桶中的架构时遇到问题
我的架构文件是格式为Attribute:DataType,Attribute:DataType
的txt文件
这就是我所拥有的
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
您需要自己阅读文本文件并将其转换为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')
]
从您给定的代码中,您从桶中调用了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云端存储中CSV或JSON数据文件的位置。
[SCHEMA_FILE]是本地计算机上架构文件的路径。
或者,您也可以在API中指定架构。
请单击here以查看这些选项的详细信息。