Hiveデータ型、DDLデータ定義言語、DMLデータ操作

データのタイプ

基本的なデータ型

Hiveデータ型 Javaデータ型 長さ
TINYINT バイト 1バイトの符号付き整数 20
SMALINT ショート 2バイトの符号付き整数 20
INT int 4バイトの符号付き整数 20
大きな 長いです 8バイトの符号付き整数 20
ブール ブール ブール型、trueまたはfalse 真/偽
浮く 浮く 単精度浮動小数点 3.14159
ダブル ダブル 倍精度浮動小数点 3.14159
ストリング ストリング 文字列、文字セットを指定でき、一重引用符または二重引用符を使用できます 'おはようこんにちは"
タイムスタンプ 時間タイプ
バイナリ バイト配列

    HiveのString型は、可変文字列であるデータベースのvarchar型と同等です。ただし、最大でいくつの文字を保存できるかを示すことはできません。理論的には2GBの文字を保存できます。

コレクションデータタイプ

データのタイプ 解説
構造 C言語の構造体と同様に、要素のコンテンツには「ドット」記号を使用してアクセスできます。たとえば、列のデータ型がSTRUCT {first STRING、last STRING}の場合、最初の要素はフィールド.firstで参照できます。
地図 MAPはキーと値のペアのタプルのセットであり、配列表記を使用してデータにアクセスできます。たとえば、列のデータ型がMAPで、キーと値のペアが「first」->「John」と「last」->「Doe」の場合、最後のフィールドはフィールド名['last']で取得できます素子
アレイ 配列は、同じタイプと名前を持つ変数のコレクションです。これらの変数は配列の要素と呼ばれ、各配列要素にはゼロから始まる番号があります。たとえば、配列の値が['John'、 'Doe']の場合、2番目の要素は配列名[1]で参照できます
create table test(
	name string,
	friends array<string>,
	children map<string, int>,
	address struct<street:string, city:string>
)
row format delimited
fields terminated by ','				列分隔符
collection items terminated by '_'		MAP,STRUCT,和ARRAY 的分隔符(数据分割符号)
map keys terminated by ':'				MAP中的key与value的分隔符
lines terminated by '\n';				行分隔符

型変換

    Hiveの基本的なデータ型は、Javaの型変換と同様に、暗黙的に変換できます。たとえば、TINYINTは自動的にINT型に変換されます。ただし、Hiveは逆変換を実行しません(たとえば、INTは自動的にTINYINTタイプに変換されません)。
    暗黙の型変換規則は次のとおりです

  1. TINYINTはINTに変換でき、INTはBIGINTに変換できるなど、整数型は暗黙的により広い型に変換できます。
  2. すべての整数型、FLOATおよびSTRING型は暗黙的にDOUBLEに変換できます。
  3. TINYINT、SMALLINT、INTはすべてFLOATに変換できます。
  4. BOOLEANタイプは他のタイプに変換できません。

CAST操作を    使用して、データ型変換を表示します。たとえば、CAST( '1' AS INT)は文字列 '1'を整数1に変換します。CAST( 'X' AS INT)の実行など、型変換が失敗した場合、式は次を返しますNULL値はNULLです。

DDLデータ定義言語

データベースを作成する

create database if not exists hive;

    データベースを作成し、データベースがHDFSに保存されている場所を指定します。*。dbフォルダー表示されません。

Create database if not exists hive location '/hive';

クエリデータベース

    データベースを表示

show datatbases;

    データベース情報を表示する

desc database hive;

    データベースの詳細を表示

desc database extended hive;

データベースを変更および削除する

    データベース名やデータベースが配置されているディレクトリの場所など、データベースの他のメタデータ情報は変更できません。

alter database hive set dbproperties('createtime'='20200528');

    空のデータベースを削除

drop database if exists hive;

    使用カスケード空のデータベースを削除するカスケード

drop database if exists hive cascade;

テーブルを作成

    テーブル構文を作成する

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...)
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]

    通常の作成テーブル

create table if not exists student(
	id int, name string
)
row format delimited fields terminated by '\t'
stored as textfile
location '/hive/warehouse/student';

    クエリ結果に基づいてテーブルを作成します(クエリ結果は新しく作成されたテーブルに追加されます)

create table if not exists student as select id,name from person;

    既存のテーブル構造に基づいてテーブルを作成する

create table if not exists student like person;

    ルックアップテーブルのタイプ

desc formatted student;

内部および外部テーブル

    デフォルトで作成されるテーブルは、いわゆる管理テーブルであり、内部テーブルと呼ばれることもあります。管理テーブルを削除すると、Hiveはこのテーブルのデータも削除します。
    EXTERNALキーワードを使用すると、ユーザーは外部テーブルを作成し、テーブルの作成中に実際のデータ(LOCATION)へのパスを指定できます。Hiveが内部テーブルを作成すると、データウェアハウスが指すパスにデータが移動します。外部テーブルが作成されている場合のみ、データが配置されているパスを記録し、データの場所を変更しないでください。テーブルを削除すると、内部テーブルのメタデータとデータが一緒に削除されますが、外部テーブルではメタデータのみが削除され、データは削除されません
    アプリケーションシナリオ:収集されたWebサイトログは、毎日HDFSテキストファイルに定期的にストリーミングされます。外部テーブル(元のログテーブル)に基づいて多くの統計分析を実行します。使用される中間テーブルと結果テーブルは内部テーブルに格納され、データはSELECT + INSERTによって内部テーブルに入ります。
    管理テーブルと外部テーブル間の変換では、( 'E​​XTERNAL' = 'TRUE')および( 'EXTERNAL' = 'FALSE')は大文字にする必要があります。

alter table student set tblproperties('EXTERNAL'='TRUE');

パーティションテーブル

    パーティションテーブルは実際にはHDFSファイルシステム上の独立したフォルダーに対応しており、パーティションのすべてのデータファイルはこのフォルダーの下にあります。Hiveのパーティションはサブディレクトリであり、ビジネスニーズに応じて、大きなデータセットを小さなデータセットに分割します。クエリを実行するときは、WHERE句の式を使用して、クエリで必要な指定のパーティションを選択します。このクエリの効率が大幅に向上します。パーティションテーブルの形式は次のとおりです。

/hive/warehouse/log_partition/20170702/20170702.log
/hive/warehouse/log_partition/20170703/20170703.log
/hive/warehouse/log_partition/20170704/20170704.log

    パーティションテーブルを作成する

create table log_partition(
	dname string, loc string
)
partitioned by (month string)
row format delimited fields terminated by '\t';

    パーティションテーブルにデータを読み込む

load data local inpath '/opt/test.txt' into table log_partition partition(month='202005');

    パーティションテーブルのデータをクエリする

select * from loc_partition where month='202005';

    パーティションを増やす

alter table log_partition add partition(month='202005');

    スペースで区切られた複数のパーティションを作成する

alter table log_partition add partition(month='202005') partition(month='202006');

    パーティションを削除

alter table log_partition drop partition(month='202005');

    コンマで区切られた複数のパーティションを削除する

alter table log_partition drop partition(month='202005'),partition(month='202006');

    パーティションテーブルにあるパーティションの数を表示する

show partitions log_partition;

    パーティションテーブルの構造を表示する

desc formatted log_partition;

    セカンダリパーティションテーブルを作成する

create table log_partition(
	dname string, loc string
)
partitioned by (month string,day string)
row format delimited fields terminated by '\t';

    セカンダリパーティションテーブルにデータを読み込む

load data local inpath '/opt/test.txt' into table log_partition partition(month='202005',day='28');

データとメタデータ

    Hiveクエリデータは、まずメタデータにクエリを実行し、次にメタデータに基づいて実際のデータを取得します。Hiveクエリには2つの条件があります。1.メタデータが存在する。2.実際のデータがあります。最初のデータであるか最初のメタデータであるかに関係なく、両方の条件が満たされている限り、データを照会できます。それらの1つが欠落している場合、データを照会することはできません。

hadoop fs -mkdir -p /hive/warehouse/test
hadoop fs -put /opt/test.txt /hive/warehouse/test
msck repair table test;
select * from test;

テーブルを修正

    テーブルの名前を変更

alter table student rename to pupil;

    列を追加

alter table pupil add column(grade int);

    列を更新し、タイプを追加する必要があることに注意してください

alter table pupil change column name last_name string;

    列を置き換えます。REPLACEは、テーブル内のすべてのフィールドを置き換えます。

alter table pupil replace column(id int,name string);

    テーブルを削除

 drop table pupil;

DMLデータ操作

データのインポート

  1. テーブルにデータをロードする(Load

    ローカルファイルをテーブルハイブに読み込む

load data local inpath '/opt/test.txt' into table hive;

    HDFSファイルをテーブルハイブに読み込む

load data inpath '/test.txt' into table hive;

    データをロードして、テーブル内の既存のデータを上書きします

load data inpath '/test.txt' overwrite into table hive;
  1. テーブルにデータを挿入する(Insert

    基本的な挿入データ

insert into table student partition(month='202005') values(1,'abc');
insert into table student partition(month='202005') select * from table;

    テーブルを作成してデータをロードする(選択時)

create table if not exists student as select id, name from student;

    テーブルの作成時に場所を介してデータをロードするパスを指定します

create table if not exists student(
	id int, name string
)
row format delimited fields terminated by '\t'
location '/hive/warehouse/student';

hadoop fs -put /opt/test.txt /hive/warehouse/student
select * from student;

     指定したHiveテーブルにデータをインポートします。注:最初にexportを使用してデータをエクスポートしてからインポートしてください。エクスポートはテーブルをエクスポートするときにメタデータファイルを生成し、インポートにはメタデータが必要なためです。

export table temptable to '/hive/warehouse/export/student';
import table student partition(month='202005') from '/hive/warehouse/export/student';

データ出力

    insertはクエリの結果をローカルにエクスポートします

insert overwrite local directory '/opt/test' select * from student;

    クエリ結果をフォーマットしてローカルにエクスポートする

insert overwrite local directory '/opt/test' row format delimited fields terminated by '\t' select * from student;

    クエリの結果をHDFSにエクスポートする(ローカルなし)

insert overwrite directory '/opt/test' select * from student;

    Hadoopコマンドをローカルにエクスポートする

hadoop fs -get /hive/warehouse/test.txt /opt/test.txt

    Hive Shellコマンドのエクスポート

hive -e 'select * from student;' > /opt/student.txt;

    HDFSにエクスポート

export table student to /hive/warehouse/student;

テーブルデータをクリア(切り捨て)

    Truncateは管理テーブルのみを削除でき、外部テーブルのデータは削除できません

truncate table student;

おすすめ

転載: blog.csdn.net/H_X_P_/article/details/106392001