質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Embulk

Embulkは、CSVデータやアクセスログなどの構造化データを高い信頼性で転送することができる、プラグインベースのバルクデータローダーです。

BigQuery

BigQueryは、Google Cloud Platformが提供しているビッグデータ解析サービス。数TB(テラバイト)またはPB(ペタバイト)の膨大なデータに対し、SQL風のクエリを実行し、高速で集計・分析を行うサービスです。

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

Q&A

解決済

3回答

2567閲覧

2つのテーブルから特定条件の基、対象レコードを抽出することは可能か

raccoondog

総合スコア77

Embulk

Embulkは、CSVデータやアクセスログなどの構造化データを高い信頼性で転送することができる、プラグインベースのバルクデータローダーです。

BigQuery

BigQueryは、Google Cloud Platformが提供しているビッグデータ解析サービス。数TB(テラバイト)またはPB(ペタバイト)の膨大なデータに対し、SQL風のクエリを実行し、高速で集計・分析を行うサービスです。

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

0グッド

0クリップ

投稿2018/12/14 00:51

編集2018/12/14 03:01

環境:Oracle12c、Windows7、Embulk 0.9.8

Oracleの2つのテーブルを特定条件で結合させて対象レコードを抽出し、embulkでBigQueryにバルクインサートさせたいです

方法論として、

➀Oracleトリガーで2つのテーブルを特定条件で結合させて対象レコードを抽出

⇒以下のようなSQLを使ってみる

select A1.BANGOU,A1.NUM,A1.STR,A1.DT from INPUT_TEST_001 A1,INPUT_TEST_002 B1 where A1.NUM = B1.NUM;

➁スケジュールジョブでembulkを実行

⇒embulkのconfig.ymlに、➀で検索されたレコードだけを指定する

➂embulkでBigQueryにバルクインサート

上記、方法論で実装可能か検討中となります

※開発中のpl/sql

DECLARE W_BANGOU varchar(50) DECLARE W_NUM varchar(50) DECLARE W_STR varchar(50) DECLARE CUR_AAA CURSOR FOR SELECT A1.BANGOU ,A1.NUM ,A1.STR FROM INPUT_TEST_001 A1 INNER JOIN INPUT_TEST_002 B1 WHERE A1.NUM = B1.NUM OPEN CUR_001; FETCH NEXT FROM CUR_AAA INTO W_BANGOU,W_NUM,W_STR; WHILE @@FETCH_STATUS = 0 BEGIN INSERT INTO INPUT_TEST_003 VALUES ( W_BANGOU ,W_NUM ,W_STR ) FETCH NEXT FROM CUR_AAA INTO W_BANGOU,W_NUM,W_STR; END CLOSE CUR_001; DEALLOCATE CUR_001;

※実行結果

SQL> @C:\Users\xxxx\Desktop\embulk\CURSOR_test_002.sql 36

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

Triggerを使用された連携の質問が最初にあった時に止めた方が良いと忠告しましたが、スルーされたのでその後の質問も静観していました。

出来ないとは思いませんが、開発するには製品レベルのコストが掛かると思います。

製品を開発されていないのであれば、現実的なところでは定周期のタスクで連携する方法でないかと思います。

投稿2018/12/14 03:06

編集2018/12/14 04:46
sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

raccoondog

2018/12/17 02:55

ご回答ありがとうございます。 検証期間はたくさんありまして、業務要件、システム要件としてもトリガーを使った実装で行う方針です 1つのトリガーで、2つのテーブルから必要レコードのみをカーソル表にとりこみ、embulkでBigqueryへバルクインサートさせたいです。 ご助言ありましたら、何卒宜しくお願い致します。
sazi

2018/12/17 03:21

embulkで連携するためにトリガーでデータを蓄積するだけという事なら敷居は下がるでしょう。 ですが、それはトリガーにする必要もない話(単にタイムスタンプで抽出すればいい話) トリガーで1件毎に都度連携するなら、色々な排他を考慮せねばなりませんが、考慮されているようには思えません。
raccoondog

2018/12/17 04:42

条件をみなおしまして、15分に1回動作するバッチをトリガーの条件としました。 15分に1回、2つのテーブルから同じカラム値を参照して、レコードを抽出し embulkでバルクインサートさせる想定となります。
sazi

2018/12/17 05:03

>15分に1回動作するバッチをトリガーの条件 意味がよく分かりません。 また、単に状況だけ述べられているようにしか受け取れず、このコメントでの私の問いに〈排他など)答えているのかどうか分かりません。
raccoondog

2018/12/18 00:22

ご回答有難うございました。 再検討して、トリガーは使わず。別の方法で実現可能か調査することになりました。
guest

0

何度も書いていますが、TRIGGERを使うと遅くなりますから、バッチで大量のデータを扱うにはお勧めしません。

Oracle 10g 以降はJOINを使うことが推奨されます。

SQL

1select 2A1.BANGOU,A1.NUM,A1.STR,A1.DT 3from INPUT_TEST_001 A1 4INNER JOIN INPUT_TEST_002 B1 5ON A1.NUM = B1.NUM;

そろそろMarkdown の機能をきちんと覚えては?

投稿2018/12/14 01:07

Orlofsky

総合スコア16417

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

raccoondog

2018/12/14 01:19

ご指摘有難うございます。 Markdownを使って、質問内容更新させて頂きました。 joinを使った方法で試してみます。
raccoondog

2018/12/14 03:03

質問内容更新しました。 ※開発中のpl/sqlで試験中です。 ※実行結果では、行数だけが表示されました。 やりたいことは、INPUT_TEST_001(実テーブル)とINPUT_TEST_002(実テーブル)から、INPUT_TEST_003(仮想テーブル)へレコードを格納させたいです
guest

0

自己解決

Oracleトリガーを使わず、別の方法で実現可能か再検討することになりました。

投稿2018/12/18 00:23

raccoondog

総合スコア77

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問