2017-01-27 10 views
0

私はmysqlの各テーブルに100000を超えるレコードを持つ1000個のテーブルを持っています。テーブルのカラム数は300〜500です。Sqoopインポートmysqlの特殊文字を置き換えます

一部の表には、列名に「。」(ドット)やスペースなどの特殊文字を含む列があります。

今私は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でハイブのテーブルを作成したいです

このエラー出力はサンプル出力です。 sqoopインポート自体をしながら私たちは_(アンダースコア)を持つ。(ドット)を置き換えることができますどのように

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] 

。私はこれを動的にしたいと思います。

答えて

1

sqtopのインポートで\ --queryオプションを--tableではなくクエリで使用すると、replace関数が使用されます。

すなわち

sqoop輸入--connectの$ {ドメイン}:$ {ポート}/$(データベース)--username $ {ユーザー名} --password $ {パスワード} \ - クエリ「COL1を選択、(col2、 '。'、 '_')を表のcolとして置き換えます。

または(推奨しません) "。"を検索して置き換えることができるシェルスクリプトを作成します。 (grepコマンド)/user/hive/warehouse/${hivedatabase}.db/$(table)

+0

私は--Queryオプションを試しましたが、selectクエリを使用して多くのカラム名を置き換えるのは私です – User12345

+0

動的クエリを作成してクエリを生成する.. –

+0

質問してもらえませんか?私はHadoopに少し戸惑っていますか? – User12345

関連する問題