# カスタムテーブルデータインポート機能
# I.概要
場合によっては、適用するデータをuser
やevent
として表現できない場合があります。データを適用する場合は、data_transfer
コマンドを使用してカスタムデータをTEシステムにインポートし、イベントテーブルとユーザーテーブルを関連付けます。
現在、次の2つのインポートデータソースがサポートされています。
mysql
:リモートmysqlデータベースtxtfile
:ローカルテキスト
# 二、使用説明
# 2.1コマンド説明
データインポートのコマンドは次のとおりです。
ta-tool data_transfer -conf <config files> [--date xxx]
# 2.2コマンドパラメータの説明
# 2.2.1-conf
渡されたパラメータはインポートテーブルの構成ブックパスで、各テーブルは構成ブックで、複数のテーブルの同時インポートをサポートし、ワイルドカード方式をサポートしています/data/config/*
または./config/*. json
# 2.2.1-日付
オプションパラメータ**--date**:オプション、パラメータはデータの日付を表し、時間マクロはこの基準時間に基づいて置換され、伝達されない場合はデフォルトで現在の日付を取り、形式はYYYYY-MM-DD
、時間マクロの具体的な使用方法は、時間マクロの使用方法時間マクロの使用方法
# 2.3配置文書の説明
# 2.3.1単一テーブルの構成例は次のとおりです。
{
"parallel_num": 2,
"source": {
"type": "txtfile",
"parameter": {
"path": ["/data/home/ta/importer_test/data/*"],
"encoding": "UTF-8",
"column": ["*"],
"fieldDelimiter": "\t"
}
},
"target": {
"appid": "test-appid",
"table": "test_table",
"table_desc": "导入测试表",
"partition_value": "@[{yyyyMMdd}-{1day}]",
"column": [
{
"name": "col1",
"type": "timestamp",
"comment": "时间戳"
},
{
"name": "col2",
"type": "varchar"
}
]
}
}
# 2.3.2外層パラメータの説明
- パラレル・ナム
- 説明:同時スレッド数をインポートし、インポートの速度を制御します
- タイプ:
int
- 必須:はい
- デフォルト:なし
- 出典
- 説明:インポートデータソースの特定のパラメーター構成
- タイプ:
jsonObject
- 必須:はい
- デフォルト:なし
- ターゲット
- 説明:エクスポート先テーブルの特定のパラメーター構成
- タイプ:
jsonObject
- 必須:はい
- デフォルト:なし
# 2.3.3 sourceパラメータの指定
- タイプ
- 説明:インポートデータソースの種類、現在のインポートツールのサポート:
txtfile
、mysql
、mysql
、ftpの3種類のインポートデータソース、その後、より多くのデータソースのサポートが追加され - タイプ:
string
- 必須:はい
- デフォルト:なし
- 説明:インポートデータソースの種類、現在のインポートツールのサポート:
- パラメータ
- 説明:異なるデータソースの具体的な配置は、三、データソース配置
- タイプ:
jsonObject
- 必須:はい
- デフォルト:なし
# 2.3.4 targetパラメーターの指定
- appid
- 説明:インポートテーブルに対応する項目appidは、TEシステムのバックグラウンドで検出できます
- タイプ:
string
- 必須:はい
- デフォルト:なし
- テーブル
- 説明: TEシステムにインポートされたテーブル名、注意:テーブル名はグローバルに重複することはできません。異なる項目に基づいて区別できるプレフィックスまたはサフィックス
- タイプ:
string
- 必須:はい
- デフォルト:なし
- テーブルデスク
- 説明:テーブルのコメントをインポートします。インポート時にこのパラメータを構成することをお勧めします。その後、テーブルを調べるときにテーブルの意味を明確
- タイプ:
string
- 必須:いいえ
- デフォルト:空
- パーティション_val
- 説明:インポートされたパーティション値、TEシステムインポートされたカスタムテーブルはデフォルトでパーティションフィールド
$pt
ので、インポート時にインポートされたパーティション値を指定しなければならず、一般的にインポートされたデータの日付に
できます。例えば、@[{yyyMMdd}-{1day}]
、2.1節で具体的な使用方法 - タイプ:
string
- 必須:はい
- デフォルト:なし
- 説明:インポートされたパーティション値、TEシステムインポートされたカスタムテーブルはデフォルトでパーティションフィールド
- コラム
- 説明: TEシステムにインポートされるテーブルフィールドの定義を定義します
name
、type
、comment
3つの属性値をname
とtype
は必須フィールドです。
- 説明: TEシステムにインポートされるテーブルフィールドの定義を定義します
[
{
"name": "col1",
"type": "timestamp",
"comment": "时间戳"
},
{
"name": "col2",
"type": "varchar"
}
]
ソース側がmysqlで、テーブル全体をインポートする場合(つまりcolumn
フィールドが["*"]
)、target
でcolumncolumn
引数を渡さず、インポートツールはmysqlのテーブル構造を優先します。残りの場合、このフィールドは必須です
- タイプ:
jsonArray
- 必須:いいえ
- デフォルト: mysqlsource側のテーブルスキーマ定義
# 2.4タイムマクロの使用方法
設定テキストの内部で時間マクロを使って時間パラメータを置き換えることができ、ta-toolツールはインポートした開始時間を基準にして、時間マクロのパラメータに基づいて時間のオフセット計算を行い、設定テキストの時間マクロを置き換えて、サポートする時間マクロ形式:@[{yyyyMMdd}]
、@[{yyyyMMdd}-{nday}]
、@[{yyyMMdd}+{nday}]
など
yyyMMdd
は、JavadateFormat
解析できる任意の日付形式に置き換えることができます。SSS
SSSSSS
- nは任意の整数であり、時間のオフセット値
- dayは時間のオフセット単位を表し、次のように
取る
ことが
ができる
、曜日
、月
- 例:現在の時刻を仮定し
ます
@[{yyyMMdd}}]
置換は20180701
@[{yyyy-MM-dd}-{1day}]
に置き換え置き換え
@[{yyyMMddHH}+{2hour}}]
置換は2018070117
@[{yyyyMMddHHmm00}-{10minute}]
に置き換えます
# 三、データソース構成をインポートする
このセクションでは、現在サポートされているtxtfile
、mysql
、mysql
、ftpの3種類のデータソースをインポートします。データソースによっては、sourceのパラメータを調整する必要があります
# 3.1 mysqlデータソース
データソースはJDBCコネクタを介してリモートのmysqlデータベースに接続され、ユーザーが設定した情報に基づいてクエリSELECT SQL文を生成してリモートのmysqlデータベースに送信し、そのSQL実行の結果をTEシステムのテーブルにインポート
# 3.1.1構成サンプル
- mysqlテーブルをTEシステムにインポートする構成例:
{
"parallel_num": 2,
"source": {
"type": "mysql",
"parameter": {
"username": "test",
"password": "test",
"column": ["*"],
"connection": [
{
"table": ["test_table"],
"jdbcUrl": ["jdbc:mysql://mysql-ip:3306/testDb"]
}
]
}
},
"target": {
"appid": "test-appid",
"table": "test_table_abc",
"table_desc": "mysql测试表",
"partition_value": "@[{yyyy-MM-dd}-{1day}]"
}
}
- カスタムsqlをTEシステムにインポートする構成例:
{
"parallel_num": 1,
"source": {
"type": "mysql",
"parameter": {
"username": "test",
"password": "test",
"connection": [
{
"querySql": [
"select db_id,log_time from test_table where log_time>='@[{yyyy-MM-dd 00:00:00}-{1day}]' and log_time<'@[{yyyy-MM-dd 00:00:00}]'"
],
"jdbcUrl": ["jdbc:mysql://mysql-ip:3306/testDb"]
}
]
}
},
"target": {
"appid": "test-appid",
"table": "test_table_abc",
"table_desc": "mysql测试表",
"partition_value": "@[{yyyy-MM-dd}-{1day}]",
"column": [
{
"name": "db_id",
"type": "bigint",
"comment": "db序号"
},
{
"name": "log_time",
"type": "timestamp",
"comment": "时间戳"
}
]
}
}
# 3.1.2 parameterパラメータ説明
- jdb cUrd
- 説明: JSONの配列記述を使用して、両端のデータベースへのJDBC接続情報を記述します。jdbcUrlは接続構成ユニットに含める必要があることに注意してください。通常、JSON配列はJDBC接続を入力します。
- タイプ:
jsonArray
- 必須:はい
- デフォルト:なし
- ユーザー名
- 説明:データソースのユーザー名
- タイプ:
string
- 必須:はい
- デフォルト:なし
- パスワード
- 説明:データソースはユーザー名のパスワードを指定します
- タイプ:
string
- 必須:はい
- デフォルト:なし
- テーブル
- 説明:同期が必要なテーブルを選択します。JSONの配列記述を使用するため、複数のテーブルを同時に抽出できます。複数のテーブルとして構成する場合、ユーザーは複数のテーブルが同じスキーマ構造であることを確認する必要があります。テーブルは、接続構成ユニットに含める必要があることに注意してください。
- タイプ:
jsonArray
- 必須:はい
- デフォルト:なし
- コラム
- 説明: JSONの配列を使用してフィールド情報を記述する、構成されたテーブル内の同期が必要な列名のコレクション。を使用
*
番号を使用すると、デフォルトですべての列構成が使用さ["*"]
。 - タイプ:
jsonArray
- 必須:はい
- デフォルト:なし
- 説明: JSONの配列を使用してフィールド情報を記述する、構成されたテーブル内の同期が必要な列名のコレクション。を使用
- どこで
- 説明:条件をフィルタリングし、指定された
column
、table
、where
条件に基づいてSQLをステッチし、このSQLに基づいてデータを抽出します。実際のビジネスシーンでは、前日のデータを選択して同期することが多く、where条件をlog_time>='@[{yyy-MM-dd 00: 00: 00}-{1day}]'and log_time<'@[{yyy-MM-dd 00: 00: 00}]'
。注意: where条件をlimit 10limit 10
。limit
はSQLの正当なwhere句ではありません。where条件はビジネス増分同期を効果的に行うことができる。where文を入力しない場合、インポートツールはフルデータの同期と見なされます。 - タイプ:
string
- 必須:いいえ
- デフォルト:なし
- 説明:条件をフィルタリングし、指定された
- クエリスカル
- 説明:一部のビジネスシナリオでは、この構成項目がフィルタリングされる条件を説明するのに十分でない場合、ユーザーはこの構成パラメーターを使用してフィルターSQLをカスタマイズできます。ユーザーがこの項目を構成した後、インポートツールは
table
、column
これらの構成パラメータを無視して、この構成項目の内容を直接使用してデータを選別します。たとえば、マルチテーブルjoin後にデータを同期する必要があります:select a, b from table_a join table_b ontable_a.id=
、ユーザーがquerySqlを構成したとき、インポートツールはtable、column、where条件の構成では、querySql優先順位はtable、column、whereオプションよりも大きい。 - タイプ:
string
- 必須:いいえ
- デフォルト:なし
- 説明:一部のビジネスシナリオでは、この構成項目がフィルタリングされる条件を説明するのに十分でない場合、ユーザーはこの構成パラメーターを使用してフィルターSQLをカスタマイズできます。ユーザーがこの項目を構成した後、インポートツールは
# 3.2 txtfileデータソース
txtfileデータソースは、ローカルサーバー上のテキストを読み取り、TEのシステムテーブルにインポートします。現在、txtfileの使用制限と特性は次のとおりです
- サポートされており、TXTのテキストの読み取りのみがサポートされており、TXTのスキーマが二次元テーブル
- サポートクラスCSV書式テキスト、カスタム区切り文字
- 複数の種類のデータ読み取り(文字列表現を使用)、列の切り抜き、列の定数
- 再帰読み取りをサポートし、テキスト名フィルタリング
- テキスト圧縮をサポートし、既存の圧縮形式はzip、gzip、bzip2
# 3.2.1構成サンプル
{
"parallel_num": 5,
"source": {
"type": "txtfile",
"parameter": {
"path": ["/home/ftp/data/testData/*"],
"column": [
{
"index": 0,
"type": "long"
},
{
"index": 1,
"type": "string"
}
],
"encoding": "UTF-8",
"fieldDelimiter": "\t"
}
},
"target": {
"appid": "test-appid",
"table": "test_table_abc",
"table_desc": "mysql测试表",
"partition_value": "@[{yyyy-MM-dd}-{1day}]",
"column": [
{
"name": "db_id",
"type": "bigint",
"comment": "db序号"
},
{
"name": "log_time",
"type": "timestamp",
"comment": "时间戳"
}
]
}
}
# 3.2.2 parameterパラメータの説明
- 経路
- 説明:ローカルブックシステムのパス情報は、ここで複数のパスの記入をサポートできることに注意してください。ワイルドカードを指定すると、インポートツールは複数のテキストをトラバースしようとします。例:指定
/data/*
、読み取り/data
ディレクトリ内のすべてのテキストを表します。現在は**
番号のみがサポートされています。特に、インポートツールは、1つのジョブで同期されたすべてのTextFileを同じデータシートと見なします。ユーザーは、すべてのFileがスキーマ情報の同じセットに適応できることを自分で保証する必要があります。テキストの読み取りはCSV形式であることを保証する必要があります。 - タイプ:
string
- 必須:はい
- デフォルト:なし
- 説明:ローカルブックシステムのパス情報は、ここで複数のパスの記入をサポートできることに注意してください。ワイルドカードを指定すると、インポートツールは複数のテキストをトラバースしようとします。例:指定
- コラム
- 説明:フィールドリストを読み取り、
type
ソースデータのタイプを指定し、index
現在のテキストの何番目の列から来ているかを指定し、value
現在のタイプを定数として指定し、ソーステキストからデータを読み取るのではなく、valuevalue
値に基づいて対応する列を自動的に生成します。
- 説明:フィールドリストを読み取り、
デフォルトでは、ユーザーはすべてstring
型でデータを読み取ることができます。
"column": ["*"]
ユーザーはColumnフィールド情報を指定できます。
({
"type": "long",
"index": 0
},
{
"type": "string",
"value": "2018-07-01 00:00:00"
})
ユーザーがColumn情報を指定するには、type
を入力し、index/value
する必要があります。
typeの値の範囲はlong
、double
、string
、boolean
- タイプ:
jsonArray
- 必須:はい
- デフォルト:なし
- フィールドデリミター
- 説明:読み取りフィールド区切り文字
- タイプ:
string
- 必須:はい
- デフォルト:
,
- 圧縮
- 説明:テキスト圧縮タイプ、デフォルトで記入しないと圧縮がないことを意味します。サポート圧縮タイプは
zip
、gzip
、bzip2
。 - タイプ:
string
- 必須:いいえ
- デフォルト:圧縮なし
- 説明:テキスト圧縮タイプ、デフォルトで記入しないと圧縮がないことを意味します。サポート圧縮タイプは
- エンコーディング
- 説明:読み取りテキストのエンコード構成。
- タイプ:
string
- 必須:いいえ
- デフォルト:
utf-8
- スキップヘッダー
- 説明: CSV形式のテキストには、ヘッダーが見出しの場合があります。スキップする必要があります。デフォルトはスキップしません。
- タイプ:
boolean
- 必須:いいえ
- デフォルト:
false
- ゼロフォーマット
- 説明:テキストブックでは標準文字列定義
null
(nullポインタ)を。
はnullFormat
提供しますnull
。たとえば、ユーザー設定:nullFormat:"\N"
、ソースデータが"\N"
、ta-toolはnull
フィールドと見なされます。 - タイプ:
string
- 必須:いいえ
- デフォルト:
\N
- 説明:テキストブックでは標準文字列定義