2017-11-14 12 views
1

Impalaでは、データベースのどの表に特定の列名が含まれているかを確認する方法はありますか?以下のようなImpala - 特定の列を持つ表の検索

何か:

select tablename, columnname 
from dbc.columns 
where databasename = 'mydatabasename' 
and columnname like '%findthis%' 
order by tablename 

上記のクエリは、Teradataの環境で動作しますが、インパラにエラーがスローされます。

ありがとう、

+0

Impalaには「dbc.columns」はありません。 –

答えて

3

ImpalaはHiveでメタストアを共有します。従来のRDBMSとは異なり、Hiveメタデータは別のデータベースに格納されています。ほとんどの場合、MySQLまたはPostgresにあります。メタストアデータベースにアクセスできる場合は、テーブルTBLSのSELECTを実行してテーブルの詳細を取得し、COLUMNS_V2を使用してカラムの詳細を取得できます。

メタストアにアクセスできない場合、唯一のオプションは、各テーブルを列名を取得するように記述することです。データベースとテーブルがたくさんある場合は、 "show tables"を使用してテーブルのリストを取得するシェルスクリプトを作成し、 "desc tablename"を使用してそれらを記述するためにテーブルをループすることができます。

+0

ハイブにアクセスできますが、tblsおよびcolumns_v2でエラーが発生する – acvbasql

+1

@acvbasql - ハイブ/インパラではこれらのテーブルは表示されません。メタストアデータベースを見つけてそこでクエリを実行する必要があります。メタストアデータベースの詳細は、hive-site.confにあります。これは通常RDBMSです。 – Ramesh

関連する問題