[Sqoop]データをorc形式のハイブ指定パーティションテーブルにインポートします

次の記事は、mysqlテーブルをhiveORCストレージ形式でパーティションテーブルにインポートしています。

mysqlテーブルをハイブTEXTfileストレージ形式のパーティションテーブルにインポートします。ジャンプするにはここをクリックしてください

SqoopはHCatalogのlibに依存する必要があるため、環境変数$ HCAT_HOMEを構成する必要があります。通常、hcatalogの関連パスは、ハイブディレクトリから見つけることができます。

  • hive-hcatalog-core-1.2.2.jarをhive / libからsqoop / libにコピーします
  • cp $ HIVE_HOME / lib / hive-shims * $ SQOOP_HOME / lib / 
  • / etc / profileファイルに追加します
export HCATALOG_HOME=${HIVE_HOME}/hcatalog

 以下のスクリプトで割り当てる必要のある変数

$ {IP} mysqlが配置されているサーバーのIP

$ {USERNAME} mysqlユーザー名

$ {PWD} mysqlパスワード

$ MYSQLTABLEmysql表

$ {date_field}テーブルの時間フィールド

$ {partition_name}ハイブに追加する必要のあるパーティションフィールドの名前

$ {partition_value}ハイブパーティション値

1. Sqoopは、データを作成してハイブorcテーブルにインポートします

sqoop import \
--connect jdbc:mysql://$IP:3306/$MYSQLDB \
--username $USERNAME \
--password $PWD \
--table $MYSQLTABLE \
--driver com.mysql.jdbc.Driver \
--hcatalog-database intelligentCoal \
--create-hcatalog-table \
--hcatalog-table t_user_orc \
--where "date_format(${date_field},'%Y-%m-%d')='${partition_value}' and \$CONDITIONS" \
--hcatalog-partition-keys ${partition_name} \
--hcatalog-partition-values ${partition_value} \
--hcatalog-storage-stanza 'stored as orc tblproperties ("orc.compress"="SNAPPY")' \
-m 1

 whereオプションは、必要に応じて追加または追加されません。whereを追加しない場合の効果は、-where "1 = 1 and \ $ CONDITIONS" \と同じです。

2.Sqoopは既存のハイブオークテーブルにデータをインポートします

sqoop import \
--connect jdbc:mysql://$IP:3306/$MYSQLDB \
--username $USERNAME \
--password $PWD \
--table $MYSQLTABLE \
--driver com.mysql.jdbc.Driver \
--hcatalog-database intelligentCoal \
--hcatalog-table t_user_orc \
--where "date_format(${date_field},'%Y-%m-%d')='${partition_value}' and \$CONDITIONS" \
--hcatalog-partition-keys ${partition_name} \
--hcatalog-partition-values ${partition_value} \
--hcatalog-storage-stanza 'stored as orc tblproperties ("orc.compress"="SNAPPY")' \
-m 1

フィールドタイプを指定しない場合、MySQLのvarcharデータもハイブに抽出されたときにvarcharタイプになりますが、ハイブでvarcharタイプを操作するとさまざまな問題が発生します。

  1.長いテキストおよび特殊文字を含むテキストの不完全な抽出

  2.ハイブ操作orcテーブルvarcharタイプフィールドが文字化けする

解決策:データを抽出するときにフィールドタイプを指定します(xxxは文字列タイプに変更する列です)

-map-column-hive xxx=String,xxxx=String

 -------------------------------------------------- -------------------------------------------------- ---------------

接続する JDBC接続情報
ユーザー名 JDBC認証ユーザー名
パスワード JDBC認証パスワード
テーブル インポートするソーステーブルの名前
運転者 JDBCドライバーを指定します
create-hcatalog-table テーブルを作成する必要があることを指定します。指定しない場合、デフォルトでは作成されません。指定したテーブルがすでに存在する場合は、エラーが報告されることに注意してください。
hcatalog-table エクスポートするターゲットテーブルの名前
hcatalog-storage-stanza ストレージ形式を指定すると、パラメーター値がcreatetableコマンドに接続されます。デフォルト:rcfileとして保存
hcatalog-partition-keys パーティションフィールドを指定し、複数のフィールドをコンマで区切ります(hive-partition-keyの拡張バージョン)
hcatalog-partition-values パーティション値を指定し、複数のパーティション値をコンマで区切ります(hive-partition-valueの拡張)

おすすめ

転載: blog.csdn.net/qq_44065303/article/details/109379729