Hiveでは、すべてのデータベースで名前でテーブルを検索する方法を教えてください。
私はTeradataユーザーです。 HIVEに存在するdbc.tables、dbc.columnsのようなシステムテーブル(Teradataに存在)に対応するものはありますか?
メタストアを照会する必要があります。
接続プロパティはHive-site.xml
内にあります
bash
<$Hive_HOME/conf/Hive-site.xml grep -A1 jdo
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://127.0.0.1/metastore?createDatabaseIfNotExist=true</value>
--
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
--
<name>javax.jdo.option.ConnectionUserName</name>
<value>Hive</value>
--
<name>javax.jdo.option.ConnectionPassword</name>
<value>cloudera</value>
メタストア内では、次のようなクエリを使用できます
mysql
select *
from metastore.DBS as d
join metastore.TBLS as t
on t.DB_ID =
d.DB_ID
where t.TBL_NAME like '% ... put somthing here ... %'
order by d.NAME
,t.TBL_NAME
;
SQLを使用してテーブルを検索できます。例:「Benchmark」で始まる名前のテーブルを検索したいのですが、残りはわかりません。
Hive CLIでの入力:
show tables like 'ben*'
出力:
+-----------------------+--+
| tab_name |
+-----------------------+--+
| benchmark_core_month |
| benchmark_core_qtr |
| benchmark_core_year |
+-----------------------+--+
3 rows selected (0.224 seconds)
または、Beelineを使用している場合は、以下のコマンドを試すことができます
!tables
注:Beelineのみで動作します(JDBCクライアントベース)
ビーラインの詳細: http://blog.cloudera.com/blog/2014/02/migrating-from-Hive-cli-to-beeline-a-primer/
hdfsを使用して、すべてのデータベースでテーブルを見つけることもできます。
hiveデータベースのパスは次のとおりです。
/apps/Hive/warehouse/
そのため、hdfsを使用して:
hdfs dfs -find /apps/Hive/warehouse/ -name t*
@hisiの答えはエレガントです。ただし、クラスターのGCのメモリ不足でエラーが発生します。だから、私のために働く別のエレガントなアプローチがあります。
foo
を検索するテーブル名とします。そう
hadoop fs -ls -R -C /apps/Hive/warehouse/ 2>/dev/null | grep '/apps/Hive/warehouse/[^/]\{1,\}/foo$'
テーブルの正確な名前を覚えておらず、テーブル名のサブストリングbar
のみを覚えている場合、コマンドは
hadoop fs -ls -R -C /apps/Hive/warehouse/ 2>/dev/null | grep '/apps/Hive/warehouse/[^/]\{1,\}/[^/]\{1,\}$' | grep bar
Hiveはすべてのメタデータ情報をMetastoreに保存します。メタストアスキーマは次の場所にあります:リンク: https://issues.Apache.org/jira/secure/attachment/12471108/HiveMetaStore.pdf
データベースにはDBS、テーブルや列にはTBLSなどのテーブルがあります。適切な結合を使用して、テーブル名または列名を見つけることができます。
含む名前を持つテーブルを検索する infob すべてのHiveデータベース全体
for i in `Hive -e "show schemas"`; do echo "Hive DB: $i"; Hive -e "use $i; show tables"|grep "infob"; done