Hive 在配置单元列中存储和查询空白值

Hive 在配置单元列中存储和查询空白值,hive,hiveql,Hive,Hiveql,我需要在配置单元表的某些列中存储长度为1、2和3的空白字符串 存储: 如果我的列类型是char,那么我看到数据总是在存储之前被修剪。i、 e.长度(列)始终为0 如果我的列类型是varchar,则不修剪数据。因此,长度(列)分别为1、2和3。 这样就解决了我的存储问题 查询: 我无法按值查询列。 说从列=''的配置单元表中选择* 只有当我做类似的事情时,它才会起作用 从配置单元表中选择*,其中长度(列)>0,修剪(列)='' 有没有办法分开处理? 假设我想查询列值为长度为3的空白字符串的记录?我

我需要在配置单元表的某些列中存储长度为1、2和3的空白字符串

存储:

  • 如果我的列类型是char,那么我看到数据总是在存储之前被修剪。i、 e.长度(列)始终为0
  • 如果我的列类型是varchar,则不修剪数据。因此,长度(列)分别为1、2和3。 这样就解决了我的存储问题
  • 查询:

  • 我无法按值查询列。 说<代码>从列=''的配置单元表中选择* 只有当我做类似的事情时,它才会起作用
    从配置单元表中选择*,其中长度(列)>0,修剪(列)=''
  • 有没有办法分开处理? 假设我想查询列值为长度为3的空白字符串的记录?我该怎么做

    这就是我尝试的(请注意,问题似乎是当文件存储为拼花地板时)

    运行Hive 2.1.1

    drop table dummy_tbl;
    CREATE TABLE  dummy_tbl (
      col1 char(1),
      col2 varchar(1),
      col3 char(3),
      col4 varchar(3)) ;
      
      insert into dummy_tbl values ('  ', '  ', '  ', '  ');
      
       select  length(col1),  length(col2),  length(col3), length(col4) from dummy_tbl;
    
    结果:

    c0  c1  c2  c3
    0   1   0   2
    
    Varchar列的工作方式绝对正确。col2是一个很好的例子。 col4 varchar(2)工作正常,此查询返回1:

     select count(*) from dummy_tbl where col4='  '; --returns 1
    
    所有字符列的长度显示为0,比较忽略空格,如下所示:

    您可以使用长度适当的
    varchar
    。如果您不确定长度,请键入字符串。

    运行Hive 2.1.1

    drop table dummy_tbl;
    CREATE TABLE  dummy_tbl (
      col1 char(1),
      col2 varchar(1),
      col3 char(3),
      col4 varchar(3)) ;
      
      insert into dummy_tbl values ('  ', '  ', '  ', '  ');
      
       select  length(col1),  length(col2),  length(col3), length(col4) from dummy_tbl;
    
    结果:

    c0  c1  c2  c3
    0   1   0   2
    
    Varchar列的工作方式绝对正确。col2是一个很好的例子。 col4 varchar(2)工作正常,此查询返回1:

     select count(*) from dummy_tbl where col4='  '; --returns 1
    
    所有字符列的长度显示为0,比较忽略空格,如下所示:


    您可以使用长度适当的
    varchar
    。或者
    STRING
    type,如果您不确定长度。

    Char类型类似于Varchar,但它们是固定长度的,这意味着比指定长度值短的值用空格填充,但在比较过程中尾随空格不重要。如果值的长度更大,则在配置单元中对其进行修剪(例外)。对于varchar列,所有空格都是重要的,比如col=''应该可以很好地工作。我更新了我的问题,添加了我尝试过的代码…测试过的代码。Col4按预期工作,返回一行。也许你的蜂巢版本不稳定?使用字符串-它不需要再修剪就可以工作。这张桌子是作为拼花地板存放的。添加到主要questionChar类型的代码片段与Varchar类似,但它们是固定长度的,这意味着比指定长度值短的值将填充空格,但在比较过程中尾随空格并不重要。如果值的长度更大,则在配置单元中对其进行修剪(例外)。对于varchar列,所有空格都是重要的,比如col=''应该可以很好地工作。我更新了我的问题,添加了我尝试过的代码…测试过的代码。Col4按预期工作,返回一行。也许你的蜂巢版本不稳定?使用字符串-它不需要再修剪就可以工作。这张桌子是作为拼花地板存放的。添加到主问题的代码段尝试了更多。这就是我发现的。数据存储为拼花地板。这就是问题的根源。正在更新问题中的代码。请重试。这就是我发现的。数据存储为拼花地板。这就是问题的根源。更新我问题中的代码。