データベースからデータを読み込む

MSIPでは、ODBCドライバーを利用してDBMSからデータを読み込むことができます。この「データベース接続ガイド」では、次の2種類の機能を利用した方法を説明します。

  • MSIPのGUIからODBC接続する方法
    • ワークスペース上のGUIを利用します
    • 読み込んだデータは、ワークスペースブラウザにdft形式で登録されます
    • GUIによるデフォルト設定が利用できるため、比較的に容易に利用できます
  • DataFrameのデータベースAPIを利用してODBC接続する方法
    • Pythonアイコン上で、DataFrameのデータベースAPIを利用します
    • Pythonアイコンが実行された時点のデータを読み込み、利用できます
    • APIで用意されている、読み込み進捗表示などの機能を利用できます

2.1. ODBCとは

ODBCは、DBMSに接続したり、データベースを直接操作するためのプロトコルです。

DBMSに接続する際、ODBCドライバーというソフトウェアを利用します。 ODBCドライバーは、各DBMSごとに異なります。 MSIPでODBCドライバーを利用する際は、対象DBMSに対応するODBCドライバーを、MSIPが稼働しているマシンにインストールする必要があります。

また、ODBCドライバーを利用する際、ODBC接続の接続情報を定義したデータソースを用意する必要があります。 DBMSについて、それらのODBCドライバーのインストール方法とデータソースの作成方法を 2.3. ODBC接続のための準備 で説明します。

2.2. ODBCドライバーによるデータベース接続

この「データベース接続ガイド」では、次の2種類の機能を利用した方法を説明します。いずれも、ODBCドライバーを利用します。

  1. MSIPの「DBからインポート」を用いてODBC接続する

    • MSIPのワークスペースブラウザ上で「DBからインポート」を選択します
    • 以下のGUIが表示されますので、「ODBC接続」タブを選択します

    ODBC接続

    • 詳細については、 2.4. MSIPの「DBからインポート」を用いてODBC接続する を参照ください
  2. DataFrameのデータベースAPIを利用してODBC接続する

    • Pythonアイコン上で、DataFrameのデータベースAPIを下図のように利用します

    DataFrameのデータベースAPI

    • 詳細については、 2.5. DataFrameのデータベースAPIを利用してODBC接続する を参照ください

2.3. ODBC接続のための準備

以下で5種類のDBMSについて、ODBCドライバーのインストール方法とデータソースの作成方法を説明します。

なお、各ODBCドライバーについての説明は、併記したバージョンを用いております。 各ODBCドライバー自体の仕様や動作の詳細、エラーの解消方法などにつきましては、各ODBCドライバーの提供元にお問い合わせください。 また、当社外の各参照先は、併記した各日時時点の情報を基にしております。

2.3.1. MariaDB

2.3.2. PostgreSQL

2.3.3. Oracle Database

2.3.4. SnowFlake

2.3.5. SQLite

2.4. MSIPの「DBからインポート」を用いてODBC接続する

ここでは、例としてMariaDBのデータソース「mariadb_odbc_driver_test」を使用して、「DBからインポート」機能でODBC接続する方法を説明します。

説明では、MSIPの共有ワークスペース内のサンプルデータ「顧客データ.dft」の内容に相当するテーブルデータを参照します。

「DBからインポート」機能の詳細については、「MSIPドキュメント」の「3.4.7. データの読み込み(データベース)」内の「ODBC 接続」を参照ください。

2.4.1. データベースのテーブルの内容をすべて読み込む

データベースのテーブル内容をすべて読み込む場合、次のように操作します。

  1. 次の画面のように、ワークスペースのプロジェクト「︙」をクリックし、メニューから「DBからインポート」を選択します

  1. 「DB接続設定」画面上部の「ODBC接続」タブを選択します

  1. 「DB接続設定」画面内の「DSN」で、利用対象のデータソース(この例では「mariadb_odbc_driver_test」)を選択します
    • 選択できるデータソースは、Windows の「ODBC データソースアドミニストレーター(64 ビット)」内のタブ「システムDSN」の「システムデータソース」に登録されているデータソースです
    • 必要な場合は、「ユーザー名」「パスワード」「追加設定」などに値を指定します
    • データソースの設定にユーザー名やパスワードなど必要な値が格納されている場合、ここで指定する必要はありません

  1. 「DB接続設定」画面内の「接続」ボタンを押して、ODBC接続設定でDBMSに接続できることを確認します
    • 接続できた場合は、接続先のDBMSの情報が「DBMS製品/バージョン」に表示されます
    • MSIPの設定ファイルに接続先DBMS用のテーブル名取得用SQLが登録されている場合は、そのSQLが「SQL」に自動的に入力されます
    • SQLが「SQL」に自動的に入力されない場合は、「MSIPドキュメント」の「3.4.7. データの読み込み(データベース)」内の「ODBC 接続」-「データベース接続設定」を参照ください

  1. 「DB接続設定」画面内の「次へ」ボタンを押すと、「SQL」に入力されたSQLを実行し、参照できるテーブルの名前を取得します

  1. 「DBデータインポート」画面が表示され、「テーブル名」に参照できるテーブルの名前が表示されます

  1. 「DBデータインポート」画面の「テーブル名」で、参照対象のテーブル名を選択し、「プレビュー」ボタンを押すと、テーブルの内容が「プレビュー」に表示されます

  1. 「DBデータインポート」画面の「インポート」ボタンを押すと、次の図のように、ワークスペース内のプロジェクトに、テーブルの内容を保持したDFTアイコンが生成されます
    • DFTアイコンはバイナリ形式のテーブルデータを格納するアイコンです
    • DFTアイコンの名前は、DBデータインポートの画面上で表示されていた「データ名」の値です
    • 「データ名」の値は変更できます

  1. DFTアイコンをシナリオ上に配置して、次のように可視化画面で参照すると、テーブルの内容から読み込んだデータが表示されます

2.4.2. データベースのテーブルの内容の一部を読み込む

データベースのテーブル内容の一部を読み込む場合、次のように操作します。

DBデータインポート画面を表示するまでの手順は、2.4.1. データベースのテーブルの内容をすべて読み込むの(1)から(6)までを参照してください。

テーブル内容のすべてを読み込む場合との違いのみ説明します。たとえば、条件を指定して特定の列のみを読み込む場合は、次のように操作します。

  1. 「DBデータインポート」画面が表示され、「テーブル名」に参照できるテーブルの名前が表示されます
    • 「インポートSQL」に次のSQLを入力します
      • SELECT 顧客ID, 性別, 収益 FROM 顧客データ WHERE 職業 = '会社員'
        
        • 「職業」が「会社員」であるデータのみが対象
        • 出力される列は「顧客ID」, 「性別」, 「収益」のみ

  1. 「DBデータインポート」画面の「プレビュー」ボタンを押すと、テーブルの内容が「プレビュー」に表示されます

  1. 「データ名」にデータ名を入力し、「インポート」ボタンを押すと、次の図のように、ワークスペース内のプロジェクトに、テーブルの内容を保持したDFTアイコンが生成されます
    • DFTアイコンの名前は「データ名」に入力された文字列です

  1. DFTアイコンをシナリオ上に配置して、次の図のように可視化画面で参照すると、テーブルの内容から読み込んだデータが表示されます

また、たとえば、読み込む行数を指定して全ての列を読み込む場合は、次のように操作します。

  1. 「DBデータインポート」画面が表示され、「テーブル名」に参照できるテーブルの名前が表示されます
    • 「インポートSQL」に次のSQLを入力します
      • SELECT * FROM 顧客データ LIMIT 10
        
        • 行については、最大10行分のみ
        • 列については、すべての列

  1. 「DBデータインポート」画面の「プレビュー」ボタンを押すと、テーブルの内容が「プレビュー」に表示されます

  1. 「データ名」にデータ名を入力し、「インポート」ボタンを押すと、次の図のように、ワークスペース内のプロジェクトに、テーブルの内容を保持したDFTアイコンが生成されます

    • DFTアイコンの名前は「データ名」に入力された文字列です
  2. DFTアイコンをシナリオ上に配置して、次の図のように可視化画面で参照すると、テーブルの内容から読み込んだデータが表示されます

2.5. DataFrameのデータベースAPIを利用してODBC接続する

ここでは、例としてMariaDBのデータソース「mariadb_odbc_driver_test」を使用して、DataFrameのデータベースAPIでODBC接続する方法を説明します。

説明では、MSIPの共有ワークスペース内のサンプルデータ「顧客データ.dft」の内容に相当するテーブルデータを参照します。

Pythonアイコンの詳細については、「MSIPドキュメント」の「3.10.1. Python アイコン」を参照ください。 DataFrameのデータベースAPIの詳細については、「MSI DataFrame ドキュメント」の「msi.common.dataframe.odbc module」を参照ください。

2.5.1. データベースのテーブルの内容をすべて読み込む

データベースのテーブル内容をすべて読み込む場合、次のように操作します。

  1. 次の図のように、MSIP上でシナリオ編集エリアのセル上で右クリックし、「Pythonスクリプトを追加」を選択します

  1. 追加されたPythonアイコンをダブルクリックし、次の図のようにPythonアイコンの画面を表示します

  1. 入力テーブルはないため、次の図のように入力設定を開き、右の「ー」ボタンを押して、入力テーブルを削除します

  1. Pythonスクリプト内でDataFrameのデータベースAPIを利用できるようにするために、次の図のように次のインポート文を追加します
    • from msi.common.dataframe.odbc import connect
      
      • モジュールmsi.common.dataframe.odbc内の関数connectを利用できるようにします

  1. Pythonスクリプト内に、次の図のように次のPythonコードを追加します
    • conn = connect('DSN=mariadb_odbc_driver_test')
      
      • データソース「mariadb_odbc_driver_test」を指定して、接続状態のODBC接続インスタンスを変数connに格納します
      • 関数connectの詳細については、「MSI DataFrame ドキュメント」の「msi.common.dataframe.odbc module」内の「msi.common.dataframe.odbc.connect」を参照ください
    • result, skip_dict = conn.fetch_table('顧客データ')
      
      • ODBC接続インスタンスの関数fetch_tableを利用して、テーブル「顧客データ」の内容を読み込み、変数resultに格納します
      • 戻り値skip_dictには、MSIPでは対応していないデータ型を利用しているために読み込めなかったカラムの情報が格納されます
    • 関数fetch_tableの詳細については、「MSI DataFrame ドキュメント」の「msi.common.dataframe.odbc module」内の「fetch_table」を参照ください

  1. 「実行」ボタンを押すと、次の図のようにPythonスクリプト内のPythonコードが実行され、resultに格納したPythonアイコンの結果としてテーブル「顧客データ」の内容が出力されます

  1. Pythonアイコンの結果を次の図のように可視化画面で参照すると、テーブルの内容から読み込んだデータが表示されます

2.5.2. データベースのテーブルの内容の一部を読み込む

データベースのテーブル内容の一部を読み込む場合、次のように操作します。

DBデータインポート画面を表示するまでの手順は、2.5.1. データベースのテーブルの内容をすべて読み込むの(1)から(4)までを参照してください。

テーブル内容のすべてを読み込む場合との違いのみ説明します。

  1. 次の図のように、Pythonスクリプト内に、次のPythonコードを追加します
    • conn = connect('DSN=mariadb_odbc_driver_test')
      
    • データソース「mariadb_odbc_driver_test」を指定して、接続状態のODBC接続インスタンスを変数connに格納します
    • 関数connectの詳細については、「MSI DataFrame ドキュメント」の「msi.common.dataframe.odbc module」内の「msi.common.dataframe.odbc.connect」を参照ください。
    • result, skip_dict = conn.query("SELECT 顧客ID, 性別, 収益 FROM 顧客データ WHERE 職業 = '会社員'")
      
    • ODBC接続インスタンスの関数queryを利用して、テーブル「顧客データ」の内容を読み込み、変数resultに格納します
      • 「職業」が「会社員」であるデータのみが対象
      • 出力は「顧客ID」, 「性別」, 「収益」のみ
    • 関数queryは、引数で指定されたSQLをDBMSで実行し、結果を返します
    • 関数queryの詳細については、「MSI DataFrame ドキュメント」の「msi.common.dataframe.odbc module」内の「query」を参照ください。

  1. Pythonアイコンの結果を次の図のように可視化画面で参照すると、テーブルの内容から読み込んだデータが表示されます

3. データベースにデータを書き出す