【问题标题】:Replacing NULLs in hive替换 hive 中的 NULL
【发布时间】:2016-12-15 18:43:43
【问题描述】:

我在 hive 中有一个表,其中包含以“null”作为数据的列。 我想用 'N/A' 替换 'null' 尝试使用 COALESCE(col_name,'N/A') 但它不起作用 我使用了 if 并且成功了

if(col_name='null','N/A',col_name)

我在列中有数百万个值,这个“如果”会影响性能吗?如果是,那么处理这种情况的最佳方法是什么?

请推荐

【问题讨论】:

    标签: hadoop hive


    【解决方案1】:

    使用 IF 条件不会影响您的性能。无论您选择什么条件函数(CASE、NVL、IF 等),它都需要遍历所有记录以检查该条件。继续使用 IF 条件

    【讨论】:

      【解决方案2】:

      我怀疑您的列不是真正的 NULL 值(即没有值),而是字符串等于“null”。也许这就是从源系统加载数据的方式?

      如果是这样,那么COALESCE(col_name,'N/A') 函数将始终返回 col_name 的值,因为这是函数中列出的第一个非 NULL 值。

      尝试如下查询:

      SELECT COUNT(*) FROM table_name WHERE col_name IS NULL;
      

      这将显示该列是否实际上具有 NULL 值,如您已配置的 Hive。

      请注意,您可以通过覆盖默认的 NULL 行为来更改 Hive 的行为:

      ALTER table_name SET TBLPROPERTIES('serialization.null.format'='your_value')
      

      另请注意,如果您有分区表,则必须在每个分区定义上使用上述 SET 语句 - 分区不会使用表级设置。

      【讨论】:

        猜你喜欢
        • 2018-04-08
        • 1970-01-01
        • 2016-06-06
        • 2018-04-03
        • 1970-01-01
        • 2023-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多