web-dev-qa-db-ja.com

ハイブ内のすべてのデータベースでテーブルを検索する

Hiveでは、すべてのデータベースで名前でテーブルを検索する方法を教えてください。

私はTeradataユーザーです。 HIVEに存在するdbc.tables、dbc.columnsのようなシステムテーブル(Teradataに存在)に対応するものはありますか?

7
v83rahul

メタストアを照会する必要があります。

接続プロパティは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/

6
Mantej Singh

hdfsを使用して、すべてのデータベースでテーブルを見つけることもできます。

hiveデータベースのパスは次のとおりです。

/apps/Hive/warehouse/

そのため、hdfsを使用して:

hdfs dfs -find /apps/Hive/warehouse/ -name t*
4
HISI

@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
1

Hiveはすべてのメタデータ情報をMetastoreに保存します。メタストアスキーマは次の場所にあります:リンク: https://issues.Apache.org/jira/secure/attachment/12471108/HiveMetaStore.pdf

データベースにはDBS、テーブルや列にはTBLSなどのテーブルがあります。適切な結合を使用して、テーブル名または列名を見つけることができます。

0
Avi C

含む名前を持つテーブルを検索する infob すべてのHiveデータベース全体

for i in `Hive -e "show schemas"`; do echo "Hive DB: $i"; Hive -e "use $i; show tables"|grep "infob"; done
0