0

ちょっと頭を悩ませて、簡単だと思ったことをやろうとしています。データベース内のあるテーブルから別のデータベース内のステージングテーブルにデータを取得するためのシェルスクリプト/MySQLオプションに移動しようとしています。基本的に、テーブルdb2.stage_customer_logを切り捨ててから、db1.customer_log->db2.stage_customer_logを切り捨てます。それぞれの成功が限られているいくつかのオプションを試しましたが、提案の準備ができています。

私が試した最初の考えは次のとおりです。

mysqldump -p dbname -u uname customer_log > stage_customer_log.csv --no-create-info

しかし、結果のファイルは元のテーブル名へのINSERTであったため、これは適切なオプションではないことが判明しました。だから私はそれを機能させるために少し操作をしなければならないでしょう。

次に、これを使用してシェルスクリプトを作成しました。

#!/bin/sh
mysql -h hostname -P 99999 -u uname -p --database dbname <<STOP

SELECT * FROM customer_log INTO OUTFILE 'stage_dm_customer_log.csv'
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'; 

\q
STOP
test $? = 0 && echo "Your batch job terminated gracefully"

これにより、希望する結果(コンマ区切りファイル)が得られましたが、ファイルはMySQLディレクトリに配置されました(絶対パスや「./」などを入力した場合でも)。アマゾンでホストされているImを見ると、アクセスエラーが発生するため、2番目の部分(インポート)は機能しません。

次に、オプションの詳細を読んだときに、最初のオプションに戻りました。私の最後のコマンドはこれでした:

mysqldump -p dbname -u uname customer_log --no-create-info --no-create-db --tab='/tmp/' --fields-optionally-enclosed-by='"' --fields-terminated-by=',' --fields-escaped-by='' --lines-terminated-by='\n' --verbose 

しかし、再び操作しなければならないファイル名になってしまいました。

私はついにPentahoにテーブルを持ち込もうとしました、そしてそれが私たちのインスタンスであるかどうかはわかりませんが、そのような小さなレコードにはかなり長い時間がかかります(85,000で32分)。だから、私は詳細を必要としませんが、このようなものに行くための最良のルートは何ですか?他の人は何を実装しましたか?

ありがとう。

4

1 に答える 1

0

両方のデータベースが同じホスト上にある場合は、次のコマンドを実行できます。

INSERT INTO db2.stage_customer_log (column1, column2, ...)
SELECT column1, column2, ...
FROM db1.stage_customer_log
WHERE [your filters here]

ただし、それらが異なるサーバー上にある場合、これは役立つ場合があります。

mysqldump -u user1 -ppassword1 -h host1 [some options here] db1 stage_customer_log | mysql -u user2 -ppassword2 -h host2 [some options here] db2

mysqldump常にcsvファイルをサーバーコンピューターに保存し、SQLダンプをクライアント側に保存します。

更新1

もう1つのトリックは、MySQL Workbench(ダンプファイルをローカルハードドライブに保存できます)を使用するか、FEDERATEDストレージエンジンを使用することです。

于 2012-11-09T00:54:04.320 に答える