CDA数据分析师
import sys
for line in sys.stdin:
pass # 后续写我们的处理逻辑就可以了
FROM (
FROM pv_users
SELECT TRANSFORM(pv_users.userid, pv_users.date)
USING 'map_script'
AS dt, uid
CLUSTER BY dt
) map_output
INSERT OVERWRITE TABLE pv_users_reduced
SELECT TRANSFORM(map_output.dt, map_output.uid)
USING 'reduce_script'
AS date, count;
map_script
作为mapper, reduce_script
作为reducer。将 pv_users
表中的 userid
, date
两列作为mapper的输入字段,处理后的输出的前两个字段分别命名为 dt
, uid
,并按照 dt
字段作partition和sort送给reduce阶段处理。reducer的输入字段为 dt
和 uid
,输出处理后的前两个字段,并命名为 date
, count
,写入到 pv_users_reduced
表中。ADD FILE
或 ADD FILES
将文件加入进来USING 'script’
语句后面没有 AS
,则Hive默认 script
的输出中第一个TAB之前的字段为key,后面的部分全部为value。若指定了 AS
,则严格按照 AS
后面的字段数输出,例如AS dt, uid
,则输出前两个字段并忽略后面的字段。此外, AS
语句可以指定数据类型,如AS (date STRING, count INT)
。默认都是 string
类型。CLUSTER BY
关键字是 DISTRIBUTE BY
和 SORT BY
的简写,这两者可以认为对应与Hadoop的partition和sort过程。如果partition和sort的key是不同的,可以使用 DISTRIBUTE BY
和 SORT BY
分别指定。FROM (
FROM pv_users
MAP pv_users.userid, pv_users.date
USING 'map_script'
AS dt, uid
CLUSTER BY dt
) map_output
INSERT OVERWRITE TABLE pv_users_reduced
REDUCE map_output.dt, map_output.uid
USING 'reduce_script'
AS date, count;
联系客服