有没有一种方法可以在 greenplum 的外部 table 创建中定义一个字符串到另一个字符串的替换。?
Is there a way to define replacement of one string to other in external table creation in greenplum.?
我需要为 hdfs 位置创建外部 table。少数字段的数据为空而不是空 space。如果此类字段的字段长度小于 4,则在选择数据时会抛出错误。有没有一种方法可以在自己创建 table 时定义用空 space 替换所有此类空值?
我正在 greenplum 中尝试,只是标记了 hive 以查看在 hive 中可以为此类情况做些什么。
您可以使用序列化 属性 将 NULL 字符串映射到空字符串。
CREATE TABLE IF NOT EXISTS abc ( ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' STORED AS TEXTFILE TBLPROPERTIES ("serialization.null.format"="")
在这种情况下,当您从配置单元查询它时,您将得到该字段的空值,而 hdfs 将具有“\N”。
或
如果你想表示空字符串而不是'\N',你可以使用COALESCE函数:
INSERT OVERWRITE tabname SELECT NULL, COALESCE(NULL,"") FROM data_table;
问题的答案是在 greenplum 的 create table 语法中使用 NULL 作为 'null' 语句。正如我所提到的,我想从在蜂巢中遇到此类问题的人那里得到一些意见。所以我也标记了蜂巢。但是,greenplum 外部 table 语法支持 NULL AS 短语,我们可以在其中指定要保留的 NULL 形式。
我需要为 hdfs 位置创建外部 table。少数字段的数据为空而不是空 space。如果此类字段的字段长度小于 4,则在选择数据时会抛出错误。有没有一种方法可以在自己创建 table 时定义用空 space 替换所有此类空值?
我正在 greenplum 中尝试,只是标记了 hive 以查看在 hive 中可以为此类情况做些什么。
您可以使用序列化 属性 将 NULL 字符串映射到空字符串。
CREATE TABLE IF NOT EXISTS abc ( ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' STORED AS TEXTFILE TBLPROPERTIES ("serialization.null.format"="")
在这种情况下,当您从配置单元查询它时,您将得到该字段的空值,而 hdfs 将具有“\N”。
或
如果你想表示空字符串而不是'\N',你可以使用COALESCE函数:
INSERT OVERWRITE tabname SELECT NULL, COALESCE(NULL,"") FROM data_table;
问题的答案是在 greenplum 的 create table 语法中使用 NULL 作为 'null' 语句。正如我所提到的,我想从在蜂巢中遇到此类问题的人那里得到一些意见。所以我也标记了蜂巢。但是,greenplum 外部 table 语法支持 NULL AS 短语,我们可以在其中指定要保留的 NULL 形式。