すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:Sqoop よくある質問

最終更新日:Jun 21, 2026

このトピックでは、Sqoop の一般的な問題について説明します。

インポート後にタイムスタンプが 8 時間ずれる問題

  • 問題

    1. 例えば、ApsaraDB RDS データソースの test_table テーブルにタイムスタンプフィールドが含まれているとします。DMS でソーステーブル test_table をクエリすると、結果には id 列と applied_at 列を持つ 5 つのレコードが含まれます。applied_at 列の値は 2024-06-14 10:08:04 から 2024-06-18 10:08:04 までの範囲です (時刻は 10:08:04 に固定され、1 日ずつインクリメントされます)。

    2. 次のコマンドを実行して、test_table から HDFS にデータをインポートします。

      sqoop import \
      --connect jdbc:mysql://rm-2ze****341.mysql.rds.aliyuncs.com:3306/s***o_sqoop_db \
      --username s***o \
      --password ****** \
      --table test_table \
      --target-dir /user/hadoop/output \
      --delete-target-dir \
      --direct \
      --split-by id \
      --fields-terminated-by '|' \
      -m 1
    3. インポート結果をクエリします。

      結果を見ると、HDFS 上のタイムスタンプ フィールドが 8 時間前の時刻になっていることがわかります。

      [root@master-1-1(xxx) ~]# hdfs dfs -cat /user/hadoop/output/part-m-00000
      1	2024-06-18 02:08:04
      2	2024-06-17 02:08:04
      3	2024-06-16 02:08:04
      4	2024-06-15 02:08:04
      5	2024-06-14 02:08:04
  • 解決策: タイムスタンプフィールドを含むデータを HDFS にインポートする場合、--direct 引数を削除します。

    sqoop import \
    --connect jdbc:mysql://rm-2ze****341.mysql.rds.aliyuncs.com:3306/s***o_sqoop_db \
    --username s***o \
    --password ****** \
    --table test_table \
    --target-dir /user/hadoop/output \
    --delete-target-dir \
    --split-by id \
    --fields-terminated-by '|' \
    -m 1

    クエリ結果に正しい値が表示されるようになります。

    [root@master-1-1(xxx) ~]# hdfs dfs -cat /user/hadoop/output/part-m-00000
    1	2024-06-18 10:08:04.0
    2	2024-06-17 10:08:04.0
    3	2024-06-16 10:08:04.0
    4	2024-06-15 10:08:04.0
    5	2024-06-14 10:08:04.0