如何使用 API 存储在 Google Cloud Storage 中的架构文件在 BigQuery 加载作业上设置架构?
Posted
技术标签:
【中文标题】如何使用 API 存储在 Google Cloud Storage 中的架构文件在 BigQuery 加载作业上设置架构?【英文标题】:How do I set a schema on a BigQuery load job using a schema file stored in Google Cloud Storage using API? 【发布时间】:2018-07-20 14:15:43 【问题描述】:我创建了一个 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
【问题讨论】:
【参考方案1】:您需要自己阅读文本文件并将其转换为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')
]
【讨论】:
如何从 .json 文件构建这个?【参考方案2】:根据您给定的代码,您从存储桶中调用了 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] 是 CSV 或 JSON 数据文件在本地计算机或 Google Cloud Storage 中的位置。
[SCHEMA_FILE] 是本地计算机上架构文件的路径。
您也可以在 API 中指定架构。
要在加载数据时指定架构,请调用 jobs.insert 方法并配置 configuration.load.schema 属性。在 jobReference 部分的 location 属性中指定您的区域。 要在创建表时指定架构,请调用 tables.insert 方法并使用架构属性在表资源中配置架构。请点击here查看这些选项的详细信息。
【讨论】:
以上是关于如何使用 API 存储在 Google Cloud Storage 中的架构文件在 BigQuery 加载作业上设置架构?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PHP 在 Firebase 中自动导入存储桶 - Google Cloud Storage
Google Cloud Endpoints 与 Cloud Datastore api 服务之间的比较
Google Cloud Platform:无法通过API在Storage中上传新文件版本
Google Cloud Vision API“错误的图像数据”错误