HIVEピット——NULLと空の文字列処理
9870 ワード
ここではHIVEで遭遇したNULLと空文字列の問題について簡単に検討し、踏み込みを避ける!!!
まず新しいテストテーブルtest_を作成します01は、後続のテストとして使用されます.
簡単ないくつかのテストデータを追加します.具体的には以下の通りです.
新規データの表示
最下位HDFSファイルのデフォルトストレージフォーマット
結論:デフォルトでは、STRINGタイプのデータが「最下位HDFSファイルのデフォルトストレージは」である場合.INTやSTRINGなどのデータがNULLの場合、下位HDFSはデフォルトでNに格納されます.
ここではname条件に基づいてクエリーを行います
デフォルトでは、INTに対してis nullを使用して空を判断できる.STRINGタイプの場合、条件is nullで調べられたのはNのデータです.条件=「,クエリされたのは」のデータです.
HIVEの使用では、データストレージやその他のデータ移行、バックアップとして最下位のHDFSファイルを使用する必要がある場合が多い.このとき、下位HDFSファイルではNと「」の処理が重要になります(アプリケーションによっては下位ファイルの処理が異なる場合があります).HIVEでは、通常、テーブルを新規作成した後に実行します.
データを再挿入し、結果をクエリーします.
最下位のHDFSファイルに格納されるデータフォーマットは
最下位のデータは「」で保存されており,クエリで表示された結果がNULLであることが分かった.注:is nullまたは=「=」は、クエリーで表示された結果に基づいてフィルタされます.下位ファイル形式ではありません.クエリーの空の値はis nullで、=」を使用すると、データがクエリーされません.
たんじゅんたんさく
まず新しいテストテーブルtest_を作成します01は、後続のテストとして使用されます.
CREATE TABLE IF NOT EXISTS `test_01`(
`id` INT, `name` STRING,`age` INT, `score` FLOAT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE;
簡単ないくつかのテストデータを追加します.具体的には以下の通りです.
insert overwrite table test_01
select NULL,NULL,10,95
union all select 2 ,'',10,95
union all select 3 ,'Lucy',15,NULL
union all select 4,'Jack',15,100;
新規データの表示
hive (tmp)> select * from test_01;
OK
NULL NULL 10 95.0
2 10 95.0
3 Lucy 15 NULL
4 Jack 15 100.0
最下位HDFSファイルのデフォルトストレージフォーマット
[root@nd2 wh]# hadoop fs -cat /user/hive/warehouse/tmp.db/test_01/000000_0
\N,\N,10,95.0
2,,10,95.0
3,Lucy,15,\N
4,Jack,15,100.0
結論:デフォルトでは、STRINGタイプのデータが「最下位HDFSファイルのデフォルトストレージは」である場合.INTやSTRINGなどのデータがNULLの場合、下位HDFSはデフォルトでNに格納されます.
ここではname条件に基づいてクエリーを行います
-- name is null
hive (tmp)> select * from test_01 where name is null;
NULL NULL 10 95.0
-- name = ''
hive (tmp)> select * from test_01 where name = '';
2 10 95.0
-- id is null
hive (tmp)> select * from test_01 where id is null;
NULL NULL 10 95.0
デフォルトでは、INTに対してis nullを使用して空を判断できる.STRINGタイプの場合、条件is nullで調べられたのはNのデータです.条件=「,クエリされたのは」のデータです.
実際の状況.
HIVEの使用では、データストレージやその他のデータ移行、バックアップとして最下位のHDFSファイルを使用する必要がある場合が多い.このとき、下位HDFSファイルではNと「」の処理が重要になります(アプリケーションによっては下位ファイルの処理が異なる場合があります).HIVEでは、通常、テーブルを新規作成した後に実行します.
-- NULL。 '' 。 null '' , HDFS null 。
ALTER TABLE test_01 SET SERDEPROPERTIES ('serialization.null.format'='');
データを再挿入し、結果をクエリーします.
hive (tmp)> select * from test_01;
OK
NULL NULL 10 95.0
2 NULL 10 95.0
3 Lucy 15 NULL
4 Jack 15 100.0
最下位のHDFSファイルに格納されるデータフォーマットは
[root@nd2 wh]# hadoop fs -cat /user/hive/warehouse/tmp.db/test_01/000000_0
,,10,95.0
2,,10,95.0
3,Lucy,15,
4,Jack,15,100.0
最下位のデータは「」で保存されており,クエリで表示された結果がNULLであることが分かった.注:is nullまたは=「=」は、クエリーで表示された結果に基づいてフィルタされます.下位ファイル形式ではありません.クエリーの空の値はis nullで、=」を使用すると、データがクエリーされません.
-- name is null
hive (tmp)> select * from test_01 where name is null;
NULL NULL 10 95.0
2 NULL 10 95.0
-- name =''
hive (tmp)> select * from test_01 where name ='';
OK
Time taken: 4.058 seconds