【问题标题】:Is there a way to define replacement of one string to other in external table creation in greenplum.?有没有办法在greenplum的外部表创建中定义一个字符串替换为另一个字符串。?
【发布时间】:2015-04-28 10:20:53
【问题描述】:

我需要为 hdfs 位置创建外部表。对于少数字段,数据具有空值而不是空白空间。如果此类字段的字段长度小于4,则在选择数据时会抛出错误。有没有办法在自己创建表时定义用空白空间替换所有此类空值?

我正在 greenplum 中尝试它,只是标记了 hive 以查看在 hive 中可以为此类情况做些什么。

【问题讨论】:

  • 你能打印出错误痕迹吗?抱歉,我无法理解这种说法:“如果此类字段的字段长度小于 4,则会引发错误......”。请您再详细说明一下好吗?
  • 我在文件中有数据,该文件由 java 创建,每列数据由管道符号分隔。对于没有数据的列,我在文件中放置了 null。现在,使用这个文件,我创建了外部故事。如果字段长度小于 4 个字符,因为文件有 null 而不是空字符串,所以抛出错误为 ERROR: value too long for type character(1)

标签: hive greenplum


【解决方案1】:

您可以使用序列化属性将 NULL 字符串映射到空字符串。

  CREATE TABLE IF NOT EXISTS abc ( ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' STORED AS TEXTFILE TBLPROPERTIES ("serialization.null.format"="")

在这种情况下,当您从 hive 查询它时,您将获得该字段的空值,而 hdfs 将具有“\N”。

或者

如果你想表示空字符串而不是'\N',你可以使用COALESCE函数:

 INSERT OVERWRITE tabname SELECT NULL, COALESCE(NULL,"") FROM data_table;

【讨论】:

    【解决方案2】:

    问题的答案是在 greenplum 的创建表语法中使用 NULL 作为 'null' 语句。正如我所提到的,我想从在蜂巢中遇到此类问题的人那里获得很少的意见。所以我也标记了蜂巢。但是,greenplum 外部表语法支持 NULL AS 短语,我们可以在其中指定您要保留的 NULL 的形式。

    【讨论】:

      猜你喜欢
      • 2011-03-25
      • 2021-06-20
      • 1970-01-01
      • 2021-06-15
      • 2013-12-03
      • 2021-07-19
      相关资源
      最近更新 更多