2017-01-31 5 views
1

私はmysqlの各テーブルに100000を超えるレコードを持つ1000個のテーブルを持っています。テーブルのカラム数は300〜500です。 テーブルの中には、カラム名に。(ドット)やスペースなどの特殊文字を含むカラムがあります。mysql sqoopの特殊文字をテキストファイルと寄木細工ファイルとしてインポート

は、今私はsqoopのインポートを行うと、ハイブ表が作成され、この後にテキストファイル

sqoop import --connect ${domain}:${port}/$(database) --username ${username} --password ${password} --table $(table) -m 1 --hive-import --hive-database ${hivedatabase} --hive-table $(table) --create-hive-table --target-dir /user/hive/warehouse/${hivedatabase}.db/$(table) 

として以下のような単発のクエリでHDFSでハイブのテーブルを作成したいが、私は上の*クエリを選択行うときテーブルにはエラーが表示されます

このエラー出力はサンプル出力です。私は寄木細工のようにインポートは、テーブルが作成されたファイルを実行すると、私は選択クエリを実行するとき、クエリが与えられるとき

Error while compiling statement: FAILED: RuntimeException java.lang.RuntimeException: cannot find field emp from [0:emp.id, 1:emp.name, 2:emp.salary, 3:emp.dno] 

は、しかし、私は結果を期待しました。 。(ドット)も_(アンダースコア)に自動的に置換されます

どうしてですか?

+0

で、このためのJiraを持つフリーフォームのクエリを使用してみてください、あなたが必要と命名すべての列を与える 私の推測で、私が試してみました@Rijulsahu sqoopが別々のフィールド –

+0

にあなたの.dotとスペースを解析しているかもしれであります--queryオプションも失敗しました – User12345

答えて

0

SQOOPが列名を有効なJava識別子に変換しているため、列名にこれらの特殊文字が含まれているため、寄せ木になっていないためです(たとえば、javaは識別子にスペースを入れません)。あなたの列は1から1まで選択してください。

select 
`.(dot)` 
from yourtable. 

私はそれが動作するかどうか教えてください。

+0

emp_idとしてemp.idを選択することを意味しますか?テーブルから。はいの場合、50列を超えるテーブルでは、各列のエイリアスを実際に特定することは困難です。私はそれを動的にしたいと思います – User12345

+0

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-ShowColumnsは機能しますか?私は試していないが、それがあなたに名前だけを与えるなら、それは助けることができる。 – hlagos

関連する問題