如何使用 Python gcloud.bigquery 客户端跳过标题行?
Posted
技术标签:
【中文标题】如何使用 Python gcloud.bigquery 客户端跳过标题行?【英文标题】:How do I skip header row using Python glcoud.bigquery client? 【发布时间】:2017-02-08 08:16:12 【问题描述】:我有一个 csv 格式的每日 GCP 结算导出文件,其中包含 GCP 结算详细信息。此导出包含标题行。我已经按如下方式设置了加载作业(总结):
from google.cloud import bigquery
job = client.load_table_from_storage(job_name, dest_table, source_gs_file)
job.source_format = 'CSV'
job.skipLeadingRows=1
job.begin()
此作业产生错误:
无法将“开始时间”解析为时间戳。所需格式为 YYYY-MM-DD HH:MM[:SS[.SSSSSS]]
此错误表示即使我指定了 skipLeadingRows=1,它仍在尝试解析标题行。我在这里做错了什么?
【问题讨论】:
【参考方案1】:在使用 Python SDK 时,您应该使用 skip_leading_rows
而不是 skipLeadingRows
。
skip_leading_rows:读取数据时要跳过的行数(仅限 CSV)。
参考:https://googleapis.dev/python/bigquery/latest/generated/google.cloud.bigquery.job.LoadJobConfig.html
【讨论】:
【参考方案2】:我无法重现此内容。我以您提供的示例(“2017-02-04T00:00:00-08:00”)为例,在 csv 文件中添加了 3 行/时间戳,将其上传到 GCS,最后在 BigQuery 中创建了一个包含一列的空表类型为TIMESTAMP
。
文件内容:
2017-02-04T00:00:00-08:00
2017-02-03T00:00:00-08:00
2017-02-02T00:00:00-08:00
然后我运行找到here 的示例Python 脚本,它成功地将文件加载到表中:
将 3 行加载到 timestamp_test:gcs_load_test 中。
def load_data_from_gcs(dataset_name, table_name, source):
bigquery_client = bigquery.Client()
dataset = bigquery_client.dataset(dataset_name)
table = dataset.table(table_name)
job_name = str(uuid.uuid4())
job = bigquery_client.load_table_from_storage(job_name, table, source)
job.begin()
wait_for_job(job)
print('Loaded rows into :.'.format(job.output_rows, dataset_name, table_name))
【讨论】:
啊哈......所以它不是 T 分隔符。我的错!谢谢你把这个放在格雷厄姆身上并证明我错了。我错过了错误消息第一部分中指出的真正问题,该部分指出:“无法将'开始时间'解析为时间戳”。 “开始时间”来自 CSV 标题行。我在脚本中包含了“job.skipLeadingRows = 1”,但这似乎不起作用。为什么作业没有跳过该标题行? 请注意,我已根据 Graham 的有用反馈修改了我原来的问题。 太棒了,那就是另外一回事了。凉爽的。但是,只是为了将来参考,完全编辑原始问题并将其变成一个新问题并不是一个好主意,因为我的答案现在完全无关紧要。最好从原始问题中衍生出一个新问题,并将其标记为已解决。以上是关于如何使用 Python gcloud.bigquery 客户端跳过标题行?的主要内容,如果未能解决你的问题,请参考以下文章