BigQuery数据传输服务如何获取无前置空格的个位数月日格式参数
问题解决方案
BigQuery Data Transfer Service的运行时参数没有原生提供直接返回无前置空格、无前导零的个位数月份/日期的格式符:
- 月份格式
%m返回固定两位带前导零的结果(如6月返回06) - 月份格式
%c返回不带前导零的结果,但1-9月会带前置空格 - 日期格式
%e返回不带前导零的结果,但1-9日会带前置空格
可以直接在DTS的URI配置中通过参数链式转换的方式拿到符合要求的值,不需要额外开发预处理脚本,两种可用写法如下:
方案1:裁剪左侧空格
直接对带前置空格的格式返回值做左裁剪去掉空格,写法最简单:
s3://bucket/year=@{run_time|"%Y"}/month=@{run_time|"%c"|LTRIM(" ")}/day=@{run_time|"%e"|LTRIM(" ")}/*.json
双位数的月份、日期返回值本身不带前置空格,LTRIM处理不会改变原有值,全月份、全日期场景都能适配。
方案2:类型转换自动去格式
利用整数类型自动忽略前后空白、不保留前导零的特性,通过两次类型转换拿到纯数字结果:
s3://bucket/year=@{run_time|"%Y"}/month=@{run_time|"%c"|CAST("INT64")|CAST("STRING")}/day=@{run_time|"%e"|CAST("INT64")|CAST("STRING")}/*.json
转换逻辑是:带空格的数字字符串转INT64时会自动过滤前后空白,整数转字符串时不会保留多余的前导字符,最终输出就是纯数字的月份、日期值。
注意:不要使用
%m/%d这类带前导零的格式做去零处理,否则10月、20日这类双位数的值会被错误截断为1月、2日,导致路径匹配失败。
内容的提问来源于stack exchange,提问作者Soner Guzeloglu
相关产品推荐
相关产品推荐

