質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Embulk

Embulkは、CSVデータやアクセスログなどの構造化データを高い信頼性で転送することができる、プラグインベースのバルクデータローダーです。

Q&A

解決済

1回答

1368閲覧

embulk 0.9.24 mysql-input で 適切な件数が取得出来ない

JunMatsumoto

総合スコア76

Embulk

Embulkは、CSVデータやアクセスログなどの構造化データを高い信頼性で転送することができる、プラグインベースのバルクデータローダーです。

0グッド

0クリップ

投稿2022/04/18 11:52

お世話になっております。

embulk 0.9.24 のmysql-input-plugin の挙動について、ご質問致します。

mysqlのデータをCSVに出力したいと考えていますが、
queryでlimit 50や where id <= 50 、between id 1 and 50
などを行っても本番環境DBのみ、出力される件数が43件になります。

※ 開発環境DBも本番環境DBも、直接mysqlコマンドで同じqueryを実行した場合は、適切に50件出力されます。

環境は以下になります。
開発環境DB:mysql-community-server-5.6.51-2.el7.x86_64 対象テーブルのレコードは約3万件
本番環境DB:mysql-community-server-5.6.44-2.el7.x86_64 対象テーブルのレコードは約140万件

使っているymlファイルは、以下になります。

in: type: mysql host: xxxx.xxx.xxx.xxx # 本番環境DB # host: yyy.yyyy.yyy # 開発環境DB user: root database: sample table: test_table #query: SELECT FROM test_table order by id asc limit 50 # 43件しか取得出来ない #query: SELECT FROM test_table between id 1 and 50 # 43件しか取得出来ない select: "*" where: id <= 50 # これだと31件しか取得出来ない default_timezone: 'Asia/Tokyo' options: {socketTimeout: 7200000} column_options: update_dt: {type: timestamp, timezone: "+0900"} out: type: file path_prefix: "./files/test-in" sequence_format: "." file_ext: csv formatter: type: csv delimiter: "," newline: LF newline_in_field: LF charset: UTF-8 quote_policy: MINIMAL quote: '"' escape: '\' null_string: 'NULL' default_timezone: 'Asia/Tokyo'

embulkはdocker-composeで動かしており、ヒープサイズが足りないのかと思い、

deploy: resources: limits: memory: 1g

や、

embulk -J-Xms512m -J-Xmx512m preview sample.test_table.yml

なども試しましたが、本番環境DBのみ50件取得が出来ません。

select: "*" は数回試しましたが、本番環境DBはレコード数が多くembuklの実行に数時間掛かる為、まずは小さい件数でpreviewやCSV出力を行って行こうと思っております。

同様の事象が発生した事がある方、お手数ですがお知恵を貸して頂けますでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

previewだと50件取得しても全部出力するわけではないからではないでしょうか?
テスト環境でrun したら所定の件数でますか?

ログに

2022-04-18 22:41:39.138 +0900 [INFO] (0017:task-0000): SQL: SELECT * FROM `users`

と出るのでそのSQLを確認するのが良いように思います。

投稿2022/04/18 13:53

hiroysato

総合スコア415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

JunMatsumoto

2022/04/19 00:39 編集

返信ありがとうございます。 開発環境のレコード数は33548件ありますが、取得件数は ヘッダー行としてカラム名を含め、3794件でした。 開発環境も、50件では正常でしたが全件となると異常なようです。 ログについては、 ``` 2022-04-19 09:30:46.672 +0900 [INFO] (0018:task-0000): Connecting to jdbc:mysql://34.84.182.216:3306/common options {useCompression=true, socketTimeout=7200000, useSSL=false, user=sky_system, useLegacyDatetimeCode=false, tcpKeepAlive=true, useCursorFetch=true, connectTimeout=300000, password=***, zeroDateTimeBehavior=convertToNull} 2022-04-19 09:30:48.596 +0900 [INFO] (0018:task-0000): SQL: SELECT * FROM `test_table` 2022-04-19 09:30:48.880 +0900 [INFO] (0018:task-0000): > 0.26 seconds 2022-04-19 09:30:50.205 +0900 [INFO] (0018:task-0000): Fetched 500 rows. 2022-04-19 09:30:50.273 +0900 [INFO] (0018:task-0000): Fetched 1,000 rows. 2022-04-19 09:30:50.395 +0900 [INFO] (0018:task-0000): Fetched 2,000 rows. 2022-04-19 09:30:50.519 +0900 [INFO] (0018:task-0000): Fetched 4,000 rows. 2022-04-19 09:30:50.723 +0900 [INFO] (0018:task-0000): Fetched 8,000 rows. 2022-04-19 09:30:51.516 +0900 [INFO] (0018:task-0000): Fetched 16,000 rows. 2022-04-19 09:30:52.698 +0900 [INFO] (0018:task-0000): Fetched 32,000 rows. 2022-04-19 09:30:52.893 +0900 [INFO] (0001:transaction): {done: 1 / 1, running: 0} 2022-04-19 09:30:52.900 +0900 [INFO] (main): Committed. 2022-04-19 09:30:52.900 +0900 [INFO] (main): Next config diff: {"in":{},"out":{}} ``` と出ております。 mysqlのgeneral logを出力しましたが、こちらも ``` 506526 Query SHOW FULL TABLES FROM `common` LIKE 'test_table' 506526 Prepare SELECT * FROM `test_table` 506527 Prepare SELECT * FROM `test_table` ``` と、全件返しているようです。 流石に1/10になるのはおかしいので、dockerのネットワーク周りを確認してみようと思います。
hiroysato

2022/04/19 01:20

多分outのsequence_formatを消せば全件でるような気がします。あるいはoutのtype: stdoutにして確認すると良いと思います。
JunMatsumoto

2022/04/19 09:10

ありがとうございます! stdout にしたところ、全件表示されました。 sequence_formatを削除するとembulkが動かなかったので、 sequence_format: ".%03d.%02d." としたところ、ファイル分割されて全権取得が出来ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問