google dataflow 能否将输入日期转换为 bigquery 时间戳
Can google dataflow convert an input date to a bigquery timestamp
对数据流还很陌生,我已经搜索了好几天来解决我的问题。我需要 运行 一个从 csv 文件读取日期的管道,格式如下:2019010420300033,通过不同的流程传递它并最终在 bigquery 中作为时间戳。有没有办法做到这一点,或者输入文件必须首先转换为可转换日期(我知道这样的格式有效:2019-01-01 20:30:00.331)。
或者,是否有可能以某种方式将数据流输出到转换该日期的新管道?
谢谢
这对 Dataflow 来说很容易。您可以使用 ParDo 或地图。
在下面的示例中,CSV 中的每一行都将传递给 Map(convertDate)。您需要修改函数 convertDate 以适合您的日期转换,然后是 returns 修改后的行。然后将整个转换后的 CSV 写入输出文件集。
使用地图的示例(简化):
def convertDate(line):
# convert date to desired format
# Split line into columns, change date format for desired column
# Rejoin columns into line and return
cols = line.split(',') # change for your column seperator
cols[2] = my_change_method_for_date(cols[2]) # code the date conversion here
return ",".join(cols)
with beam.Pipeline(argv=pipeline_args) as p:
lines = p | 'ReadCsvFile' >> beam.io.ReadFromText(args.input)
lines = lines | 'ConvertDate' >> beam.Map(convertDate)
lines | 'WriteCsvFile' >> beam.io.WriteToText(args.output)
对数据流还很陌生,我已经搜索了好几天来解决我的问题。我需要 运行 一个从 csv 文件读取日期的管道,格式如下:2019010420300033,通过不同的流程传递它并最终在 bigquery 中作为时间戳。有没有办法做到这一点,或者输入文件必须首先转换为可转换日期(我知道这样的格式有效:2019-01-01 20:30:00.331)。 或者,是否有可能以某种方式将数据流输出到转换该日期的新管道?
谢谢
这对 Dataflow 来说很容易。您可以使用 ParDo 或地图。
在下面的示例中,CSV 中的每一行都将传递给 Map(convertDate)。您需要修改函数 convertDate 以适合您的日期转换,然后是 returns 修改后的行。然后将整个转换后的 CSV 写入输出文件集。
使用地图的示例(简化):
def convertDate(line):
# convert date to desired format
# Split line into columns, change date format for desired column
# Rejoin columns into line and return
cols = line.split(',') # change for your column seperator
cols[2] = my_change_method_for_date(cols[2]) # code the date conversion here
return ",".join(cols)
with beam.Pipeline(argv=pipeline_args) as p:
lines = p | 'ReadCsvFile' >> beam.io.ReadFromText(args.input)
lines = lines | 'ConvertDate' >> beam.Map(convertDate)
lines | 'WriteCsvFile' >> beam.io.WriteToText(args.output)