レコード:コマンドを使用して、2つの大量のデータ・テキストの内容が同じかどうかを比較します.
10356 ワード
コマンドを使用して、2つの大量のデータテキストの内容が同じレコードかどうかを比較します.
需要
DBには、|time|sum|の2列のデータがあり、ESでクエリされたjson形式の結果も、timeとsumの2つの結果を含む.両者のデータのtime-sumが一つ一つ一致するかどうかを比較する必要があります.データ量が大きく、人工的に1本のペアを外すのに適していないため、いくつかのツールを使用して実現する必要があります.
データの例
DB:
time
sum
121212121212
333
121212121213
666
ES:
ps:aggregations->appId->buckets[0]->count->buckets[0]のkeyがtime,doc_countはsumであり、これら以外にも無駄なデータがたくさんあります.
ステップ
データをローカルに保存
Esは、クエリー結果を直接ローカルに保存する方法を採用しています.
db,1つのsqlを書いて、CSVフォーマットのデータを書き出します
まずc_timeはint convertから文字列になりstr_を使用しますto_date関数を使用して、文字列を日付タイプに解析し、unix_を使用します.timestampはタイムスタンプに変わります.
ここではMySQLのいくつかの時間関数を紹介します unixタイムスタンプは、グリニッジ時間1970年01月01日00時00分00秒から現在までの総秒数 と定義する時間表現である. from_unixtime(unix_timestamp,format) ここのunix_timestampは処理が必要なタイムスタンプ(このパラメータはUnixタイムスタンプ)、フィールド名、UNIXタイムスタンプ文字列、formatは変換が必要なフォーマットであってもよい.この関数はunixタイムスタンプを人間が理解できるフォーマットに変換することができる.
unix_timestamp([date]) 日付をunixタイムスタンプ に変換
timestamp(expression, interval) 単一パラメータの場合、関数は日付または日付時間式を返します.2つのパラメータがある場合は、パラメータを と加算します.
データパージ
dbのCSVはまだきれいであることが分かったので,esとdbのフォーマットが一致することに重点を置く必要がある.
以下はesデータの洗浄過程である
スペースをクリア
vimのグローバル置換機能の使用
構文:%s///g
構文:%s/old/new/g、ここでsは置換モードを表し、oldは置換する文字列を表し、newは新しい文字列を表す.彼は1行1行で処理され、gはglobalを表し、1行のすべてを置換し、gを持たないと1行で検索された最初のoldのみを置換する.%行番号は、ある行を変更することを意味し、%はすべての行を変更することを意味します.
グローバル置換記事転送ポイントここ
####;「key」:1567129260000、「doc_count」:8233、同じ行にする
vimを使用したグローバル置換機能でもあります
コマンド:%s/,"doc_count/,"doc_count/g
を選択します.
異なるシステムでの改行文字の表示について windowsでr linuxは です macはr 他のデータを洗い流し、「key」:1567129260000、「doc_count」:8233のみを保持します.
ここでgrepパイプを使用してデータを抽出し、新しいファイルに配置します.コマンドhead-n filename表示ヘッダn行のデータ コマンドwc filenameは、ファイルを表示するデータが何行あるかを示す grep「doc_count」、grepも行に従って探し、ターゲットフィールドを含む行を探します.「doc_count」を含む行を新しいファイルに出力する必要があります.
コマンドはgrep""doc_count">tmp.log.es.cleanです
再洗浄データ「key」などのフィールド
vimのグローバル置換機能を使うか
データをこのように洗浄する
diffを用いて最後の比較を行う
diff file1 file2
diffコマンドは、ファイルの違いを比較するために使用されます.
diffは、テキストファイルの異同箇所を行単位で比較します.ディレクトリを比較するように指定すると、diffはディレクトリ内の同じファイル名のファイルを比較しますが、サブディレクトリは比較しません.
データが返されていない場合は、2つのファイルが同じであることを証明し、比較に成功しました.
拡張コマンド コマンドの出力が間違っています.再入力が必要です.ctrl+wのセグメントの削除 を押します. vimクイックページめくり ページ全体ctrl f ctrl d f-forward,d-backward 半ページページページめくりctrl d ctrl u d-down,u-up 1行ctrl e ctrly を転がす zzカーソル位置をスクリーン中央 に位置させる ztはtopを表し、カーソルが行のトップ になるようにする. zb bはbottomを表し、カーソルの位置を 低くする.
vimファイルの内容を消去 :%d
awkは強力なテキスト分析ツールです -F':'は、区切り記号とは何かを表し、デフォルトはスペース です. awk-F':'{{print$1$2}'は、カッコに注意し、':'に従って各行を分割した後、第1列と第2列を出力し、真ん中にスペース があることを意味する. awk-F':'{{print$1',"$2}',に"","第1列の第2列の中間に1つ出力できる"."
需要
DBには、|time|sum|の2列のデータがあり、ESでクエリされたjson形式の結果も、timeとsumの2つの結果を含む.両者のデータのtime-sumが一つ一つ一致するかどうかを比較する必要があります.データ量が大きく、人工的に1本のペアを外すのに適していないため、いくつかのツールを使用して実現する必要があります.
データの例
DB:
time
sum
121212121212
333
121212121213
666
ES:
{
"took": 12558,
"timed_out": false,
"_shards": {
"total": 2090,
"successful": 2090,
"skipped": 1940,
"failed": 0
},
"hits": {
"total": 5582253,
"max_score": 0,
"hits": []
},
"aggregations": {
"appId": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "kkkkkkk",
"doc_count": 5582253,
"count": {
"buckets": [
{
"key_as_string": "2019-08-29 13:45:00",
"key": 1567086300000,
"doc_count": 8405,
"rc": {
"value": 8405
}
},
{
"key_as_string": "2019-08-29 13:46:00",
"key": 1567086360000,
"doc_count": 7687,
"rc": {
"value": 7687
}
}
...
ps:aggregations->appId->buckets[0]->count->buckets[0]のkeyがtime,doc_countはsumであり、これら以外にも無駄なデータがたくさんあります.
ステップ
データをローカルに保存
Esは、クエリー結果を直接ローカルに保存する方法を採用しています.
db,1つのsqlを書いて、CSVフォーマットのデータを書き出します
select UNIX_TIMESTAMP(STR_TO_DATE(convert(c_time,char),"%y%m%d%H%i")) * 1000, sum(c_count) from table where c_app_id = "kkkkkkkkk" and c_type = 0 and c_time >= 1908292145 and c_time < 1908300945 group by c_app_id, c_time
まずc_timeはint convertから文字列になりstr_を使用しますto_date関数を使用して、文字列を日付タイプに解析し、unix_を使用します.timestampはタイムスタンプに変わります.
ここではMySQLのいくつかの時間関数を紹介します
データパージ
dbのCSVはまだきれいであることが分かったので,esとdbのフォーマットが一致することに重点を置く必要がある.
以下はesデータの洗浄過程である
スペースをクリア
vimのグローバル置換機能の使用
構文:%s///g
構文:%s/old/new/g、ここでsは置換モードを表し、oldは置換する文字列を表し、newは新しい文字列を表す.彼は1行1行で処理され、gはglobalを表し、1行のすべてを置換し、gを持たないと1行で検索された最初のoldのみを置換する.%行番号は、ある行を変更することを意味し、%はすべての行を変更することを意味します.
グローバル置換記事転送ポイントここ
####;「key」:1567129260000、「doc_count」:8233、同じ行にする
vimを使用したグローバル置換機能でもあります
コマンド:%s/,"doc_count/,"doc_count/g
を選択します.
異なるシステムでの改行文字の表示について
ここでgrepパイプを使用してデータを抽出し、新しいファイルに配置します.
コマンドはgrep""doc_count">tmp.log.es.cleanです
再洗浄データ「key」などのフィールド
vimのグローバル置換機能を使うか
データをこのように洗浄する
1567086300000,8405
1567086300000,8406
...
diffを用いて最後の比較を行う
diff file1 file2
diffコマンドは、ファイルの違いを比較するために使用されます.
diffは、テキストファイルの異同箇所を行単位で比較します.ディレクトリを比較するように指定すると、diffはディレクトリ内の同じファイル名のファイルを比較しますが、サブディレクトリは比較しません.
データが返されていない場合は、2つのファイルが同じであることを証明し、比較に成功しました.
拡張コマンド