从日志表和参考表在 Big Query 中创建新表
Posted
技术标签:
【中文标题】从日志表和参考表在 Big Query 中创建新表【英文标题】:Creating a New Table in Big Query from a log table and a reference table 【发布时间】:2017-04-27 22:13:38 【问题描述】:我是大查询的新手,需要创建一个烫发。来自日志文件和参考表的表。我是新手,做错了什么,但不知道为什么。请帮忙。
日志文件(示例)
-Event_Time,User_ID,Type
-1/1/2017,123_abc,a
-1/2/2017,123_bcd,b
-1/2/2017,123_abc,c
参考表(示例)
-类型合作伙伴
-a 1
-b 2
-c 3
-d 3
create table workarea.SummaryTable AS (
User_ID string,
TotalCount integer,
imps_time timestamp,
Partner integer)
insert into workarea.SummaryTable
select distinct User_ID,
COUNT(*) as TotalCount,
MIN(TIME) as imps_time,
SUM(case when Partner = '1' then 1 else 0 end) as 1,
SUM(case when Partner = '2' then 1 else 0 end) as 2,
SUM(case when Partner = '3' then 1 else 0 end) as 3
from workarea.logfile i
join workarea.referencetable r on i.Type=r.Type
where CID=10848805
group by USER_ID
【问题讨论】:
【参考方案1】:.. 做错了什么,但不知道为什么
到目前为止,我已经确定了以下故障点
CREATE TABLE
语句在 BigQuery 中不可用Data Manipulation Language
仅允许您使用 INSERT
、DELETE
和 UPDATE
您需要有表pre-created
,然后才能在其中操作/插入数据
-
别名不能以数字开头 -
所以下面的片段不正确
SUM(CASE WHEN Partner = '1' THEN 1 ELSE 0 END) AS 1,
SUM(CASE WHEN Partner = '2' THEN 1 ELSE 0 END) AS 2,
SUM(CASE WHEN Partner = '3' THEN 1 ELSE 0 END) AS 3
你应该使用类似的东西
SUM(CASE WHEN Partner = '1' THEN 1 ELSE 0 END) AS Partner_1,
SUM(CASE WHEN Partner = '2' THEN 1 ELSE 0 END) AS Partner_2,
SUM(CASE WHEN Partner = '3' THEN 1 ELSE 0 END) AS Partner_3
某些字段看起来在引用的表中不存在,但您在最终查询中使用它们:MIN(time) as imps_time
中的time
和WHERE CID=10848805
中的CID
目标表的架构有 4 个字段 - 而 select 语句的架构有 6 个字段。你应该清除这个!他们必须匹配!
可能的“解决方案”(BigQuery 标准 SQL)
我假设(只是为了在这里取得一些进展)您的目标表的架构实际上如下所示
User_ID STRING,
TotalCount INT64,
imps_time TIMESTAMP,
Partner_1 INT64,
Partner_2 INT64,
Partner_3 INT64
在这种情况下 - 下面的查询应该产生正确的插入结果
#standardSQL
SELECT
User_ID,
COUNT(*) AS TotalCount,
MIN(Event_Time) AS imps_time,
SUM(CASE WHEN Partner = '1' THEN 1 ELSE 0 END) AS Partner_1,
SUM(CASE WHEN Partner = '2' THEN 1 ELSE 0 END) AS Partner_2,
SUM(CASE WHEN Partner = '3' THEN 1 ELSE 0 END) AS Partner_3
FROM `workarea.logfile` i
JOIN `workarea.referencetable` r ON i.Type=r.Type
-- WHERE CID=10848805
GROUP BY USER_ID
【讨论】:
以上是关于从日志表和参考表在 Big Query 中创建新表的主要内容,如果未能解决你的问题,请参考以下文章