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 ストアドプロシージャは、SourcePath と DestinationPath パラメータに絶対パスと相対パスの両方をサポートしています:
- 絶対パス: プロトコルやサーバーの詳細を含む、ファイルの完全な場所を指定します。
EXEC COPYFILE @SourcePath = 'C:\Users\Public\Downloads\CSV Files\file1.csv', @DestinationPath = 'C:\Users\Public\Downloads\CSV Files\Folder2'
これにより、ローカルマシンまたは SFTP サーバー上の /folder1 から /folder2 に file1.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 を通じてデータにアクセスするためのライブラリを、永続的に無料で利用できます。今すぐライセンスをリクエストして、より優れた接続性を持つプロジェクトを始めましょう!