大きなファイル(~~ 20 MB)を解析するためにApache Hadoopを使いたいです。これらのファイルはpostegresqlのダンプです(ほとんどがCREATE TABLEとINSERTです)。最初の場所にCREATE TABLEまたはINSERT INTO以外のものをフィルタリングするだけで済みます。Hadoop grep dump sql
grep map reduceを^(CREATE TABLE|INSERT).*;$
パターン(CREATE TABLEまたはINSERTで始まり、 ";"で終わる行)で使用することにしました。 私はMapReduceのを書くことができると思います(CREATE TABLE test(\n "id"....\n..."name"...\n );
のような)
私の問題は、これらのいくつかは、作成および(スキーマは私が推測本当に大きいため)複数の行を取る挿入しているので、パターンがすべてでそれらを一致させることができませんジョブを1つの行に "挿入"と "作成"をそれぞれリファクタリングすることができますが、ファイルが大きいため実際にはコストがかかるでしょう。ファイルからすべての「\ n」を削除することもできますが、1回のマップ操作で複数の作成/挿入を処理しなければならず、作業のバランスが悪くなります。私は本当に挿入または作成ごとに1つのマップ操作が欲しいです。
初期ダンプファイルのレイアウトを変更することはできないので、私はダンプファイルの作成に責任を負いません。
私は実際に何が最良の解決策であるか分からない、私はいくつかの助けを使用することができます:)。必要に応じて追加の情報を提供することができます。最初
この正規表現では、有効な行https://regex101.com/r/myrLaA/1をすべて抽出するのはどうですか?注:サンプルデータがなければ、あなたに良い答えを与えるのはかなり難しいです。 –
申し訳ありません本当の問題について私は本当に明確ではありませんでした。正規表現は大丈夫です、私はHadoopマップの仕組みを理解するのに苦労しました。私はHadoop(https://wiki.apache.org/hadoop/Grep)のgrep mapreduceの例を使用して作業を始めましたが、この例のマップ操作は1行の関数であるため、完全なSQL行を取得する方法はありませんでした。代わりに、標準のgrepを使うのではなく、マッパーを書いてファイル全体を扱うようにします。とにかくあなたの助けのためのThx :) –