1.データベースを作成します。
1)データベースを作成し、HDFS上のデフォルト・データベース・ストレージ・パスは/user/hive/warehouse/*.dbあります。
hive > create database db_hive;
2)ではないが、裁判官が存在する場合に増加し、すでにエラーが存在して、作成するデータベースを避けてください。(標準文言)
hive > create database db_hive;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Database db_hive already exists
hive > create database if not exists db_hive;
3)データベースを作成し、HDFSに保存されている場所のデータベースを指定します
hive > create database db_hive2 location '/db_hive2.db';
2、データベースを照会
2.1ディスプレイのデータベース
1。表示データベース
hive> show databases;
2。データベースクエリの表示をフィルタします
hive> show databases like 'db_hive*';
OK
db_hive
db_hive_1
2.2 Viewデータベースの詳細
1。表示データベース情報
hive> desc database db_hive;
OK
db_hive hdfs://hadoop102:9000/user/hive/warehouse/db_hive.db atguiguUSER
2。拡張ディスプレイデータベースの詳細、
hive> desc database extended db_hive;
OK
db_hive hdfs://hadoop102:9000/user/hive/warehouse/db_hive.db atguiguUSER
40.3.3 切换当前数据库
hive (default)> use db_hive;
2 .3現在のデータベースを切り替えます
hive > use db_hive;
3、データベースを変更
このデータベースに記載された情報を、属性値の値属性-ユーザーがキーDBPROPERTIESにデータベースを設定するには、ALTER DATABASEコマンドを使用することができます。他のメタデータ情報データベースには、データベースが置かれているデータベース・ディレクトリの名前と場所を含む、不変です。現在使用中のデータベースを変更し、使用して終了
ハイブ(デフォルト)>( 'CREATETIME' = '20170830')データベースdb_hiveセットdbpropertiesを変更します。
でハイブの変更はにつながる見ます
hive> desc database extended db_hive;
db_name comment location owner_name owner_type parameters
db_hive hdfs://master:8020/user/hive/warehouse/db_hive.db root USER {createtime=20170830}
4、データベースを削除
1。空のデータベースを削除します。
hive>drop database db_hive2;
2。あなたが存在しないデータベースを削除する場合が存在する場合は、データベースの最適な使用が存在するかどうかを判断します
hive> drop database db_hive;
FAILED: SemanticException [Error 10072]: Database does not exist: db_hive
hive> drop database if exists db_hive2;
3。データベースが空でない場合は、カスケードコマンドを使用することができ、削除することを余儀なく
hive> drop database db_hive;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Database db_hive is not empty. One or more tables exist.)
hive> drop database db_hive cascade;
5.テーブルを作成します。
1。テーブルの構文を構築するには
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]
2。フィールドの説明
(1)テーブル名が指定されたテーブルを作成し、CREATE。同じテーブル名が既に存在する場合は、例外がスローされ、そうでないが、この例外を無視するオプションを存在している場合、ユーザーは使用することができます。
テーブルの構造は、実際のデータ点(位置)へのパスを指定しながら、(2)外部キーワードは、ユーザが外部表を作成することを可能にする外部を作成した場合、ハイブが内部テーブルを作成するときに、データウェアハウスのデータポイントのパスに移動しますテーブル、レコードのみデータパス、場所は、データに変更を加えることはありません。内部テーブルとデータのメタデータが一緒に削除され、テーブルを削除し、外部表メタデータのみを削除し、データを削除しないでください。
(3)COMMENT:テーブルおよび列にコメントを追加。
(4)PARTITIONED BYは、パーティションテーブルを作成します
(5)サブバケットテーブルを作成BY CLUSTERED
(6)使用しないでソート
(7)行形式
DELIMITED [charでTERMINATED FIELDS] [charでTERMINATEDコレクションアイテム]
[charでTERMINATED MAPのKEYS] [charでTERMINATED LINES]
| [SERDEPROPERTIES(PROPERTY_NAME = PROPERTY_VALUE、PROPERTY_NAME = PROPERTY_VALUE、...)WITH] SERDEのserde_name
ときにユーザーがカスタムSerDeテーブルを構築したり、内蔵のSerDeを使用することができます。あなたが行形式またはROWのFORMAT DELIMITEDを指定しない場合は、独自のSerDeを使用します。テーブルの構成において、ユーザは、指定されたテーブルにリストされたユーザは、特定のデータ列SerDeによって決定カスタムSerDe、ハイブテーブルを指定しながら、テーブルの列を指定する必要があります。
SerDeはシリアル化および逆シリアル化するためのもの、短いシリアライズ/ Deserilizeです。
(8)指定された保存ファイルの種類として保存され
共通ストアファイルの種類:SEQUENCEFILE(バイナリシーケンスファイル)、TEXTFILE(テキスト)、のrcfile(柱状保存形式)
データファイルはプレーンテキストである場合は、TEXTFILEとして格納を使用することができます。あなたはSEQUENCEFILEとして格納されて使用してデータを圧縮する必要がある場合。
(9)場所:ロケーションテーブルをHDFSに格納されている指定します。
(10)のような、ユーザが既存のテーブルの構造をコピーすることを可能にするが、データをコピーしません。
5.1管理テーブル
1。理論
テーブルは、デフォルトいわゆる管理テーブルによって作成され、時には、内部テーブルと呼びます。このため、テーブルの、ハイブは(多かれ少なかれ)になり、データのライフサイクルを制御します。上記で定義したハイブは、これらのテーブルは、構成項目hive.metastore.warehouse.dir(例えば、/ユーザ/ハイブ/倉庫)のサブディレクトリに格納されたデータをデフォルト設定されます。私たちはときに 、あなたが管理テーブルを削除すると、ハイブはまた、テーブル内のデータを削除します。経営陣は、テーブルとデータを共有する他のツールには適していません。
2。ケース実用的な操作
(1)一般的なテーブルを作成します
create table if not exists student2(
id int, name string
)
row format delimited fields terminated by '\t'
stored as textfile
location '/user/hive/warehouse/student2';
(2)(クエリの結果は、新たに作成されたテーブルに追加される)クエリ結果に基づいて、テーブルを作成します
create table if not exists student3 as select id, name from student;
(3)既存のテーブル構造に基づいてテーブルを作成します
create table if not exists student4 like student;
タイプ(4)ルックアップテーブル
hive > desc formatted student2;
Table Type: MANAGED_TABLE
5.2 外部表
1。理論
表が外部表であるためように、その完全所有ハイブは、このデータではありません。このデータを削除しないテーブルを削除しますが、情報のメタデータ記述が削除されます。
2。使用シナリオの管理と外側のテーブル
収集し、毎日ウェブサイトのログを定期的にHDFSテキストファイルに流れ込みます。統計分析の多数の外部テーブル(元のログテーブル)を行うに基づいて、結果テーブルに格納されている内部テーブルを使用して、テーブルに使用される中間データテーブルは、内部への挿入+ SELECT。
3。ケース実用的な操作
作成部署と従業員が外のテーブルであり、テーブル内のデータをインポートします。
(1)生データ
dept.txt
10 ACCOUNTING 1700
20 RESEARCH 1800
30 SALES 1900
40 OPERATIONS 1700
emp.txt
7369 SMITH CLERK 7902 1980-12-17 800.00 20
7499 ALLEN SALESMAN 7698 1981-2-20 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981-2-22 1250.00 500.00 30
7566 JONES MANAGER 7839 1981-4-2 2975.00 20
7654 MARTIN SALESMAN 7698 1981-9-28 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 1981-5-1 2850.00 30
7782 CLARK MANAGER 7839 1981-6-9 2450.00 10
7788 SCOTT ANALYST 7566 1987-4-19 3000.00 20
7839 KING PRESIDENT 1981-11-17 5000.00 10
7844 TURNER SALESMAN 7698 1981-9-8 1500.00 0.00 30
7876 ADAMS CLERK 7788 1987-5-23 1100.00 20
7900 JAMES CLERK 7698 1981-12-3 950.00 30
7902 FORD ANALYST 7566 1981-12-3 3000.00 20
7934 MILLER CLERK 7782 1982-1-23 1300.00 10
table文の(2)建設
Departmentテーブルの作成
create external table if not exists default.dept(
deptno int,
dname string,
loc int
)
row format delimited fields terminated by '\t';
Employeeテーブルを作成します。
create external table if not exists default.emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
)
row format delimited fields terminated by '\t';
(3)テーブル作成を参照してください。
ハイブ>ショーテーブル。
OK
TAB_NAME
DEPT
EMP
(4)外部のテーブルデータに
データのインポート
ハイブ>負荷データテーブルdefault.deptにローカルINPATH「/opt/module/datas/dept.txt」;
ハイブ>負荷データテーブルdefault.empにローカルINPATH「/opt/module/datas/emp.txt」;
クエリ結果
ハイブ> EMPから選択*;
ハイブ> DEPTから選択*;
(5)表示フォーマットのデータ
ハイブ> DESCフォーマットさDEPT。
テーブルタイプ:EXTERNAL_TABLE
5.3 管理テーブルと交換外側テーブル
だけではないに完全に準拠し、単一引用符、厳密に大文字と小文字を区別し、使用することができ、それが唯一のKVを追加することなく、有効になります
タイプ(1)のルックアップテーブル
ハイブ> DESCフォーマットさstudent2。
テーブルタイプ:MANAGED_TABLE
(2)内部テーブル外側のテーブルstudent2を変更します
変更テーブルstudent2セットtblproperties( '外部' = 'TRUE');
タイプ(3)ルックアップテーブル
ハイブ> DESCフォーマットさstudent2。
テーブルタイプ:EXTERNAL_TABLE
(4)内部テーブル外側のテーブルstudent2を変更します
変更テーブルstudent2セットtblproperties(「外部」=「偽」)。
タイプ(5)ルックアップテーブル
ハイブ> DESCフォーマットさstudent2。
テーブルタイプ:MANAGED_TABLE
注意:( 'EXTERNAL' = ' TRUE ')と( 'EXTERNAL' = 'false'に ) 大文字小文字を区別し、固定文言を!
6、パーティションテーブル
パーティションテーブルは、実際のファイルシステムHDFSフォルダ上の別のファイルに対応している、フォルダにはすべてのデータファイルのパーティションです。ハイブのパーティションのサブディレクトリで、サービスに応じた小さなデータセットに大きなデータセットの必要性。クエリクエリは、WHERE句の式で必要とされる指定されたパーティションを選択すると、このような問合せの効率は多くのことを改善します。
6.1パーティションテーブルの基本的な操作
1。パーティションテーブルの導入(日付に従って、ログ管理の必要性)
/user/hive/warehouse/log_partition/20170702/20170702.log
/user/hive/warehouse/log_partition/20170703/20170703.log
/user/hive/warehouse/log_partition/20170704/20170704.log
2。パーティションテーブルの構文を作成します。
hive > create table dept_partition(
deptno int, dname string, loc string
)
partitioned by (month string)
row format delimited fields terminated by '\t';
3。パーティション表にデータをロードします
ハイブ>負荷データテーブルdefault.dept_partitionパーティションにローカルINPATH「/opt/module/datas/dept.txt」(月=「201709」)。
ハイブ>負荷データテーブルdefault.dept_partitionパーティションにローカルINPATH「/opt/module/datas/dept.txt」(月=「201708」)。
ハイブ>負荷データテーブルdefault.dept_partitionパーティションにローカルINPATH「/opt/module/datas/dept.txt」(月=「201707」)。
4。クエリデータパーティションテーブル
単一パーティションのクエリ
ハイブ> * dept_partitionからどこヶ月=「201709」を選択します。
マルチパーティション共同問い合わせ組合(ソート)または3つの方法で
hive > select * from dept_partition where month='201709'
union
select * from dept_partition where month='201708'
union
select * from dept_partition where month='201707';
_u3.deptno _u3.dname _u3.loc _u3.month
10 ACCOUNTING NEW YORK 201707
10 ACCOUNTING NEW YORK 201708
10 ACCOUNTING NEW YORK 201709
20 RESEARCH DALLAS 201707
20 RESEARCH DALLAS 201708
20 RESEARCH DALLAS 201709
30 SALES CHICAGO 201707
30 SALES CHICAGO 201708
30 SALES CHICAGO 201709
40 OPERATIONS BOSTON 201707
40 OPERATIONS BOSTON 201708
40 OPERATIONS BOSTON 201709
5。地区を追加
単一のパーティションを作成します。
ハイブは、テーブルdept_partitionは、パーティションを追加変更>(月= '201706');
複数のパーティション作成 をスペースで区切って
ハイブは、テーブルdept_partitionは、パーティションを追加変更>(月= '201705')パーティション(月= '201704');
6。パーティションを削除
単一のパーティションを削除するには
ハイブ>テーブルdept_partitionドロップパーティション(月=「201704」)を改変すること。
複数のパーティションの削除 カンマで区切って
ハイブ>表dept_partitionドロップパーティション(月= '201705')、パーティション(月= '201706')を変化させます。
7。どのように多くのパーティションのパーティションテーブルを見ます
ハイブ>ショーパーティションのdept_partition。
8。パーティションテーブルの構造を見ます
ハイブ> DESCフォーマットさdept_partition。
#パーティション情報
#COL_NAMEのDATA_TYPEコメント
月の文字列
6.2パーティション表の注意事項
1。セカンダリ・パーティション表の作成
create table dept_partition2(
deptno int, dname string, loc string
)
partitioned by (month string, day string)
row format delimited fields terminated by '\t';
2。通常のデータのロード
(1)二次パーティションテーブルにデータをロードするの
ハイブ>負荷データテーブルにローカルINPATH「/opt/module/datas/dept.txt」
default.dept_partition2パーティション(月= '201709'、日= '13' );
(2)データのクエリを分配
ハイブ> SELECT * FROM dept_partition2どこから月= '201709' と日= '13' ;
3。データは直接、ディレクトリパーティションにアップロードされるので、パーティションテーブルと3通りの方法で生成された関連するデータ
(1)一つの方法:データ復旧をアップロードした後
データをアップロード
ハイブ> DFS -mkdir -p
/ユーザ/ハイブ/倉庫/ dept_partition2 /月= 201709 /日= 12。
ハイブ> DFS -put /opt/module/datas/dept.txt/user/hive/warehouse
/ dept_partition2 /月= 201709 /日= 12;
クエリデータ(クエリデータだけでアップロードすることはできません)
ハイブ> SELECT * FROM dept_partition2どこから月= '201709' と日= '12' ;
修理オーダーを実行
ハイブ> MSCK修理テーブルdept_partition2。
再びデータを照会
ハイブ> SELECT * FROM dept_partition2どこから月= '201709' と日= '12' ;
(2)第二の方法:データ・パーティションをアップロードした後に添加します
データをアップロード
ハイブ> DFS -mkdir -p
/ユーザ/ハイブ/倉庫/ dept_partition2 /月= 201709 /日= 11。
ハイブ> DFS -put /opt/module/datas/dept.txt /ユーザー/ハイブ/倉庫/ dept_partition2 /月= 201709 /日= 11;
パーティションの実行を追加
ハイブ>は、テーブルdept_partition2は、パーティション(月=「201709」を追加、変更します、
日= '11' );
クエリデータ
ハイブ> SELECT * FROM dept_partition2どこから月= '201709' と日= '11' ;
(3)3つの方法:分割負荷にデータをアップロードした後、
ディレクトリを作成します
ハイブ> DFS -mkdir -p
/ユーザ/ハイブ/倉庫/ dept_partition2 /月= 201709 /日= 10。
データをアップロード
ハイブ>負荷データテーブルにローカルINPATH「/opt/module/datas/dept.txt」
dept_partition2パーティション(月= '201709'、日= '10' );
クエリデータ
ハイブ> SELECT * FROM dept_partition2どこから月= '201709' と日= '10' ;
7テーブルを変更します。
7.1テーブルの名前を変更します
1。文法
new_table_name TOテーブルtable_nameのRENAMEをALTER
2。実用的な操作ケース
ハイブ> dept_partition3するテーブルdept_partition2リネームを改変すること。
7.2パーティションテーブルを追加、修正、削除
基本的な操作のパーティションテーブルの上に6.1を参照してください。
7.3列情報を交換/修正/追加
1。文法
列を更新
テーブルtable_nameのALTER CHANGE [COLUMN] col_old_name col_new_name COLUMN_TYPE [COMMENTのcol_comment] [| COLUMN_NAME AFTER FIRST]を
付加および置換コラム
テーブルtable_nameのALTER ADDを| REPLACE COLUMNS(COL_NAMEのDATA_TYPE [COMMENTのcol_comment]を、...)
注:ADDは新しい分野の代表である、列(列の前にパーティション)の後ろの位置にあるすべてのフィールド、REPLACEは、すべてのフィールドを示す置換テーブルです。
2。実用的な操作ケース
(1)ルックアップテーブル構造
ハイブ>降順dept_partition。
(2)の列を追加
ハイブ>は、テーブルdept_partitionが列(deptdesc文字列)を追加変更します。
(3)ルックアップテーブルの構造
ハイブ>降順dept_partition。
(4)列を更新
ハイブ> DESC int型deptdescテーブルdept_partition変更列を変更。
(5)ルックアップテーブルの構造
ハイブ>降順dept_partition。
(6)交換カラム
ハイブ>テーブルdept_partitionが列(DEPTNO列、DNAMEを交換変えます
文字列、LOC列);
(7)ルックアップテーブル構造
ハイブ>降順dept_partition。
8、テーブルを削除
ハイブ>ドロップテーブルdept_partition。