投放到Google BigQuery中不合适吗?

时间:2018-07-04 14:49:21

标签: sql google-bigquery

我有一个#StandardSQL查询

 SELECT
    CAST(created_utc AS STRING),
    author,
 FROM
    `table`
 WHERE
   something = "Something"

这给我以下错误,

Error: Cannot read field 'created_utc' of type STRING as INT64

created_utc的示例是1517360483

如果我了解该错误,那么我显然不会。 created_utc存储了一个字符串,但是查询尝试将其转换为INT64失败。我希望CAST函数可以将其强制保持为字符串形式。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

问题是您实际上没有一个表。在您的问题中,您写了table,但我怀疑您正在查询table*,它与多个表匹配,其中一个表恰好具有该列的不同类型。除了使用table*,您还可以选择:

  • 对各个表使用UNION ALL,并根据需要在SELECT列表中进行强制转换。
  • 如果您知道哪些表具有该列作为INT64而不是STRING,并且可以排除它们,则可以使用_TABLE_SUFFIX上的过滤器来跳过从某些表中的读取。

答案 1 :(得分:1)

正如Elliott所指出的那样-您的某些值实际上不能转换为INT64,因为它们不表示整数,而是具有数字以外的其他字符

在SELECT下面使用您可以标识这些值,这样将有助于您查找有问题的条目,然后决定下一步的操作

#standardSQL
SELECT created_utc, author
FROM `table`
WHERE something = "Something"
  AND NOT REGEXP_CONTAINS(created_utc , r'[0-9]')