よく聞かれる質問に気づいたので、質問してからよくわからなかったので回答することにしました。では、まずHadoop 2.0からHCatalogとHiveを1つの製品として扱うようになりました。Hive は、デフォルトで HCatalog にテーブルを作成します。これは、HCatalog の自然なインターフェイスが Hive であることを意味します。したがって、すべての SQL-92 DML ( https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML ) と DDL ( https://cwiki.apache.org/confluence/display/Hive/LanguageManual )を使用できます。 +DDL ) から始まりcreate/alter/drop database
、 etccreate/alter/drop table
で終わるまでselect, insert into
... 唯一の例外は、insert が insert into ... as select from としてのみ機能することです。典型的な挿入には、次のものを使用する必要があります。
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
テーブルにはパーティションやインデックスを含めることができます (ただし、私の経験ではうまく機能しません) が、これはリレーショナル データベースではないため、外部キーを使用することはできません。
HBase の場合はまったく異なります。これはnoSQLデータベースの1つです(ただし、 以前の投稿で回答されたように、HiveはSQLクエリ用のHBaseインターフェースになる可能性があります)キー->値で構成されたテーブルがあります。いくつかのコマンドを比較してみましょう (テーブルの作成、テーブルへの挿入、テーブルからの選択、テーブルの削除)
ハイブ:
create table table_name (
id int,
value1 string,
value2 string
)
partitioned by (date string)
LOAD DATA INPATH 'filepath' ] INTO TABLE table_name [PARTITION (partcol1=val1, partcol2=val2 ...)]
INSERT INTO table_name as select * from othertable
SELECT * FROM table_name
DROP TABLE table_name
HBase:
hbase> create 'test', 'cf'
hbase> put 'test', 'row1', 'cf:a', 'value1'
hbase> get 'test', 'row1'
hbase> disable 'test'
hbase> drop 'test'
ご覧のとおり、構文はまったく異なります。SQL ユーザーにとって、HCatalog を使用するのは当然のことです。noSQL データベースを使用するユーザーは、HBase を快適に使用できます。