【问题标题】:BigQuery standard SQL table wildcards with date columns带有日期列的 BigQuery 标准 SQL 表通配符
【发布时间】:2017-06-08 22:02:44
【问题描述】:

当我在 BigQuery 网页界面中使用日期列,在标准 SQL 中使用表通配符进行查询时,我遇到了错误。

这行得通:

#standardSQL
SELECT 
  sale_item,
  date_of_sale
FROM `my-project.past_sales.sales_20170601`
limit 100

这不是:

#standardSQL
SELECT 
  sale_item,
  date_of_sale
FROM `my-project.past_sales.sales_*`
WHERE _TABLE_SUFFIX BETWEEN "20170530" AND "20170601"
limit 100

date_of_saleDATE 类型,而sale_itemSTRING 类型。错误是:Error: Invalid adaptation for field: date_of_sale (message Msg_0_CLOUD_QUERY_TABLE). Cannot change from TYPE_STRING to int32

【问题讨论】:

    标签: google-bigquery bigquery-standard-sql


    【解决方案1】:

    这意味着date_of_sale 在一个表中是DATE,在另一个表中是STRING。你可以通过联合来找到罪魁祸首:

    #standardSQL
    SELECT * FROM `my-project.past_sales.sales_20170530` UNION ALL
    SELECT * FROM `my-project.past_sales.sales_20170531` UNION ALL
    SELECT * FROM `my-project.past_sales.sales_20170601`;
    

    您实际上不需要运行查询; UI 中的验证器将指示不匹配的列类型在哪里。

    要修复错误,您可以重新生成问题日的数据,应用强制转换,或者您可以使用联合运行查询,而不是在其中添加显式强制转换。例如,假设20170531 的表的列是STRING,您可以这样做:

    #standardSQL
    SELECT 
      sale_item,
      date_of_sale
    FROM (
      SELECT *
      FROM `my-project.past_sales.sales_*`
      WHERE _TABLE_SUFFIX BETWEEN "20170530" AND "20170601" AND
        _TABLE_SUFFIX != 20170531
    ) UNION ALL
    SELECT * REPLACE(CAST(date_of_sale AS DATE) AS date_of_sale)
    FROM `my-project.past_sales.sales_20170531`
    LIMIT 100;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      • 1970-01-01
      • 1970-01-01
      • 2014-03-11
      相关资源
      最近更新 更多