Hive选择列来执行case语句

时间:2013-08-14 18:33:41

标签: hadoop amazon-web-services amazon-s3 hive amazon-dynamodb

这会将来自dynamodb的数据动态导出到s3。

-- Load S3 Table with data from DynamoDB
INSERT OVERWRITE TABLE s3_table SELECT * FROM dynamodb_table;

问题在于它留下了一堆\N。我可以手写它看起来像

-- Load S3 Table with data from DynamoDB
   INSERT OVERWRITE TABLE s3_table SELECT DCS_ID, CASE WHEN MAKE IS NULL THEN "" ELSE MAKE END, CASE WHEN MODEL IS NULL THEN "" ELSE MODEL END FROM dynamodb_table; 

问题是选择列说“当为NULL然后”“否则结束”

当前输出如下所示

PORTAL  1.5.1.25.2      2013-08-09 13:45:20.126 2013-08-09 13:45:20.282 \N      \N      \N      \N      \N      \N

所需的输出看起来像这样

PORTAL  1.5.1.25.2      2013-08-13 18:18:24.667 2013-08-13 18:18:24.832 

1 个答案:

答案 0 :(得分:3)

hive输出包含空值的字符串“\ N”(以区别于空白),因此要么必须准备每一列,要么之后处理输出(如果有大量数据,可以使用流作业。)

我经常使用coalesce函数:coalesce接受多个参数并返回第一个非null(如果全为null则返回null)。在您的示例中,为了避免输出中的空值,您可以执行以下操作:

INSERT OVERWRITE TABLE s3_table
SELECT coalesce(DCS_ID,''), coalesce(MAKE,''), coalesce(MODEL,'') 
FROM dynamodb_table;