我创建了一个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
答案 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中指定架构。
请单击here查看这些选项的详细信息。