CData Python Connectors とは?

CData Python Connectors は、270 を超えるデータソースへのリアルタイムデータアクセスを簡素化する、標準ベースの接続ソリューションです。リレーショナルデータベースはもちろん、SaaS プラットフォーム、ERP スイート、ビッグデータプラットフォーム、NoSQL システムまで、SQL-92 準拠の標準インターフェースで接続できます。

SQL-92 インターフェースにより、データソースを標準的なデータベースのようにクエリ、移行、レプリケーション、操作できます。複雑な API やプロトコル固有のリクエストを書く必要がなくなり、わずか数行のコードでリアルタイム接続を実現できます。

CData Python Connectors を選ぶ理由

標準の Python DB-API はデータベース接続の手段を提供していますが、非リレーショナルデータソースへの組み込みサポート、リアルタイムクエリ、高度な SQL 操作には対応していません。そのため、開発者はクラウドベースのサービス、NoSQL データベース、エンタープライズアプリケーションとの連携に、複雑な API 統合、カスタムスクリプト、サードパーティライブラリを使用する必要がありました。

CData Python Connectors は、この課題を解決します。270 以上のデータソースへのデータアクセスを、統一された SQL-92 インターフェースでシンプルに実現。リレーショナル・非リレーショナルシステムの両方にシームレスに統合でき、プッシュダウンクエリ処理、メタデータ検出、インテリジェントなクライアントサイド実行によってパフォーマンスを最適化します。

主な機能

  • Python ユニバーサルデータ接続: データベース、SaaS プラットフォーム、NoSQL システム、BI ツール、ETL ワークフローなどに、標準インターフェースで接続できます。
  • リアルタイムデータアクセス: レプリケーション不要で、リアルタイムデータを取得できます。
  • プラグアンドプレイ接続: Salesforce、Snowflake、Jira、NetSuite、Google Sheets など、各種プラットフォームに即座に接続できます。
  • SQL-92 標準インターフェース: 組み込みのメタデータ検出機能で、非リレーショナルデータソースに対して SQL クエリを実行できます。
  • プッシュダウンクエリ最適化: サポートされている操作をデータソース側にプッシュすることで、パフォーマンスを向上させます。
  • 包括的な SQL サポート: 集計、結合、複雑な SQL 関数をスムーズに実行できます。
  • クライアントサイドクエリ実行: サポートされていない SQL 操作もネイティブに処理し、完全な互換性を提供します。
  • シームレスなライブラリ統合: pandas、SQLAlchemy、Dash、petl などのデータサイエンスツールと連携できます。
  • エンタープライズグレードのパフォーマンス: セキュアでスケーラブル、高速クエリに最適化されています。
  • クロスプラットフォームサポート: Windows、macOS、Linux 環境で利用できます。
  • Community Edition: 非商用利用は無料で、コア機能をすべて利用できます。

CData Python Connectors の仕組み

インストール後、CData Python Connectors は通常の Python モジュールと同様に、スクリプト内でインポートして使用できます。接続文字列はデータソースによって異なりますが、データ操作の方法論はすべてのサポート対象データソースで一貫しています。

CData Python Connectors の主な操作

データソースへの接続

開発者は最小限の設定で接続を確立できます。以下は、CSV ファイルを含むローカルディレクトリに接続する例です:

import cdata.csv as mod conn = mod.connect("URI=C:\CSVFolder;")

このコードでは、CData Python CSV Connector モジュールをインポートし、ローカルの CSV ファイルディレクトリのパスを URI で指定して接続を作成しています。接続後は、CSV ファイル内のデータに対して標準 SQL でクエリを実行できます。

スキーマとメタデータの検出

スキーマとメタデータの呼び出しにより、接続先データの構造を探索できます。テーブル、ビュー、カラムはデータベース(DB-API が接続対象として設計されたもの)の通常の構成要素ですが、ファイルストア、サービス、SaaS アプリケーションでは必ずしも意味を持ちません。CData Python Connectors は、これらの非リレーショナルデータソースの構造を表形式のデータモデルに変換します:

  • エンティティとオブジェクトは、ビュー(読み取り専用)とテーブル(読み書き可能)として表現されます。
  • フィールドと属性は、カラムとして公開されます。

たとえば、CSV 形式のファイルを含むディレクトリのメタデータには、各ファイルに対応するテーブルと、各ファイルのフィールドに対応するカラムが含まれます。

次の例では、システムテーブルを使用して利用可能なテーブルを取得します(各テーブルは、URI 接続プロパティで指定したディレクトリ内の CSV 形式ファイルを表します):

import cdata.csv as mod conn = mod.connect("URI=C:\CSVFolder;") cur = conn.cursor() cur.execute("SELECT * FROM sys_tables") for row in cur.fetchall(): print(row)

このコードでは、カーソルオブジェクトを初期化し、sys_tables システムテーブルをクエリしてデータソース内のすべてのテーブルを取得し、その名前を出力しています。

利用可能なビュー(読み取り専用のエンティティやオブジェクトを表す)を取得するには、次のようにします:

cur.execute("SELECT * FROM sys_views") for row in cur.fetchall(): print(row)

これにより、データモデル内のすべてのビューを取得して出力できます。

指定したテーブルのカラム名と属性を取得して出力するには、次のようにします:

cur.execute("SELECT * FROM sys_tablecolumns WHERE TableName = 'YourTable'") for column in cur.fetchall(): print(column)

データのクエリと変更

接続後は、execute() メソッドを使用してデータソースに対して SQL クエリを実行できます:

cur = conn.execute("SELECT Email, Username FROM YourTable") rs = cur.fetchall() for row in rs: print(row)

このクエリでは、指定したテーブルから Email と Username カラムを取得し、結果を出力しています。

クエリだけでなく、INSERT、UPDATE、DELETE などの SQL コマンドでデータを変更することもできます。以下は、テーブルに新しいレコードを挿入する例です:

cmd = "INSERT INTO NorthwindOData (Email, Username) VALUES (?, ?)" params = ["[email protected]", "Ana Trujilo"] cur = conn.execute(cmd, params)| print("Records affected:", cur.rowcount)

これにより、テーブルに新しいレコードが挿入され、メールアドレスとユーザー名を持つ新しいユーザーが追加されます。

注意: ネイティブの DB-API は、エラー処理とトランザクション管理のために commit()rollback() をサポートしています。これらはデータベースシステムでは広くサポートされていますが、Web サービス、SaaS アプリケーション、ファイルストアなど、CData Python Connectors がサポートする他のデータソースではほとんどサポートされていません。そのため、CData Python Connectors では rollback() は実装されていません。

ストアドプロシージャによる高度な操作

ストアドプロシージャを使用すると、標準的なクエリを超えた高度な操作を実行できます。CData Python Connectors では、execute() または callproc() メソッドを使用してストアドプロシージャを実行できます。

利用可能なストアドプロシージャ

CData Python Connectors は、データソースに応じてさまざまなストアドプロシージャを提供しています。一般的なものには以下があります:

  • GetOAuthAccessToken: 認証用の OAuth アクセストークンを取得します。
  • ListFiles: ローカルまたはクラウドベースのディレクトリに保存されているすべての CSV ファイルを一覧表示します。
  • CopyFile: ローカルまたはクラウドストレージからファイルをコピーします。
  • RefreshOAuthAccessToken: 認証用の OAuth トークンを更新します。

ストアドプロシージャを使用すると、認証、一括処理、スキーマ更新などのタスクを SQL ライクなコマンドで実行でき、複雑なデータ操作が簡素化されます。

CopyFile ストアドプロシージャの実行

例として、CopyFile ストアドプロシージャの動作を見てみましょう。CopyFile ストアドプロシージャを使用すると、指定したソースパスから宛先パスにファイルをコピーできます。ローカルストレージでもクラウドストレージでも対応しています。これは、SFTP サーバーやクラウドディレクトリなど、リモートに保存されているファイルを扱う際に特に便利です。

このプロシージャには 2 つのパラメータが必要です:

  • SourcePath: コピーするファイルのフルパスまたは相対パス。
  • DestinationPath: ファイルのコピー先の場所。

パスパラメータについて

CopyFile ストアドプロシージャは、SourcePathDestinationPath パラメータに絶対パス相対パスの両方をサポートしています:

  • 絶対パス: プロトコルやサーバーの詳細を含む、ファイルの完全な場所を指定します。
EXEC COPYFILE @SourcePath = 'C:\Users\Public\Downloads\CSV Files\file1.csv', @DestinationPath = 'C:\Users\Public\Downloads\CSV Files\Folder2'

これにより、ローカルマシンまたは SFTP サーバー上の /folder1 から /folder2file1.csv がコピーされます。

  • 相対パス: 接続文字列で指定した URI を基準としたパスです。
EXEC COPYFILE @SourcePath = 'file1.csv', @DestinationPath = 'Folder2'

接続文字列の URI が C:\Users\Public\Downloads\CSV Files\ に設定されている場合、このコマンドは '/CSV Files' から '/CSV Files/folder2'file1.csv をコピーします。

CopyFile ストアドプロシージャの呼び出し

CopyFile ストアドプロシージャは、callproc() または execute() のいずれかを使用して実行できます。どちらのメソッドも、ファイルコピー操作が成功したかどうかを示す Success ブール値フィールドを含む結果セットを返します。

execute() の使用

execute() メソッドを使用して、SQL ライクなコマンドでストアドプロシージャを実行できます:

Cmd = "EXECUTE CopyFile SourcePath = ?, DestinationPath = ?" params = ['C:\Users\Public\Downloads\CSV Files\file1.csv', 'C:\Users\Public\Downloads\CSV Files\Folder2'] conn.execute(cmd, params)

このメソッドでは、動的な SQL コマンドをより柔軟に構築できます。'?' プレースホルダーは、params リストの値に置き換えられます。

callproc() の使用

callproc() メソッドは、ストアドプロシージャを実行する簡潔な方法です。プロシージャ名とパラメータのリストを引数として受け取ります。

cur = conn.cursor() params = ['C:\Users\Public\Downloads\CSV Files\file1.csv', 'C:\Users\Public\Downloads\CSV Files\Folder2'] cur.callproc("CopyFile", params) for result in cur.fetchall(): print(result)

cur.callproc("CopyFile", params) でストアドプロシージャを実行し、params リストでソースパスと宛先パスを指定しています。その後のループで結果セットを反復処理し、ファイルが正常にコピーされたかどうかを示す Success フラグを確認できます。

execute()callproc() の違い

callproc() メソッドは、プロシージャ名とパラメータのリストを使用して、ストアドプロシージャを直接実行します。SQL コマンドを書かずに、シンプルで分かりやすいストアドプロシージャの呼び出しに最適です。

一方、execute() メソッドは、パラメータ化クエリを含む SQL ライクなコマンドでストアドプロシージャを実行します。このアプローチはより柔軟性があり、動的な SQL 実行や複雑なロジックの処理に適しています。

どちらのメソッドも、ストアドプロシージャが正常に実行されると Success ブール値フィールドを返します。


データ開発者向けの無料 Community ライセンス

CData Python Connectors は、従来のデータベースに加えて、SaaS、NoSQL、ビッグデータシステムを含む 270 以上のデータソースへの一貫した SQL ベースの接続を提供し、Python DB-API の機能をさらに強化します。

CData Python Community ライセンスを使用すれば、個人の Python プロジェクトで使い慣れた SQL を通じてデータにアクセスするためのライブラリを、永続的に無料で利用できます。今すぐライセンスをリクエストして、より優れた接続性を持つプロジェクトを始めましょう!