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

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

ただいまの
回答率

90.38%

  • Oracle Database

    152questions

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

  • BigQuery

    111questions

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

  • PL/SQL

    87questions

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

  • Embulk

    40questions

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

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

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 297

raccoondog

score 13

環境: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  
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+1

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

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

select
A1.BANGOU,A1.NUM,A1.STR,A1.DT
from INPUT_TEST_001 A1 
INNER JOIN INPUT_TEST_002 B1
ON A1.NUM = B1.NUM;


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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/14 10:19

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

    キャンセル

  • 2018/12/14 12:03

    質問内容更新しました。

    ※開発中のpl/sqlで試験中です。
    ※実行結果では、行数だけが表示されました。

    やりたいことは、INPUT_TEST_001(実テーブル)とINPUT_TEST_002(実テーブル)から、INPUT_TEST_003(仮想テーブル)へレコードを格納させたいです

    キャンセル

+1

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/17 13:42

    条件をみなおしまして、15分に1回動作するバッチをトリガーの条件としました。

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

    キャンセル

  • 2018/12/17 14:03

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

    キャンセル

  • 2018/12/18 09:22

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

    キャンセル

check解決した方法

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.38%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Oracle Database

    152questions

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

  • BigQuery

    111questions

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

  • PL/SQL

    87questions

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

  • Embulk

    40questions

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