データ開発のためのドライバとコネクタの使用
概要
標準ベースのドライバは、SQL を使用して Software-as-a-Service (SaaS) プラットフォームやその他の非データベースソースからデータを扱う簡単な方法を提供します。SQL ベースのコネクタを活用することで、従来のデータベースに使用するのと同じ SQL 構文で異種データソースをクエリできます。標準ベースのドライバをデータ統合タスクに使用する主なメリットをご覧ください。
標準ベースのドライバは、SQL を使用して Software-as-a-Service (SaaS) プラットフォームやその他の非データベースソースからデータを扱う簡単な方法を提供します。SQL ベースのコネクタを活用することで、従来のデータベースに使用するのと同じ SQL 構文で異種データソースをクエリできます。標準ベースのドライバをデータ統合タスクに使用する主なメリットをご覧ください。
標準ベースのドライバを使用すれば、複数の言語固有の SDK を学習したり維持したりする必要はありません。代わりに、各データソースをリレーショナルデータベースのように扱い、使い慣れた SQL ステートメントでデータを送受信できます。SELECT、JOIN、GROUP BY、SUM、ORDER BY、WHERE などの一般的な操作により、プラットフォームごとにカスタムロジックを書くことなく、データの集約、フィルタリング、変換を迅速に行えます。
| HTTP リクエスト | 対応する SQL |
|---|---|
| GET | SELECT |
| POST | INSERT |
| PUT, PATCH | UPDATE |
| DELETE | DELETE |
ほとんどの標準ベースのドライバは、メタデータテーブルへのクエリによるエンドポイントとリソースの検出をサポートしています。この機能により、データ構造とその関係がより簡単にアクセスできるようになり、API ドキュメントを検索する時間を削減できます。標準のシステムテーブルをクエリするだけで、データソースのメタデータを検出できます。
データベースと同様に「sys_tables」列をクエリして、データソースで利用可能な「テーブル」と「ビュー」(エンドポイント、オブジェクト、エンティティを表す)を確認できます。
SELECT * FROM sys_tables;
| CatalogName | SchemaName | TableName | TableType | Description | IsUpdateable |
|---|---|---|---|---|---|
| CData | Salesforce | Account | TABLE | (null) | true |
| CData | Salesforce | Opportunity | TABLE | (null) | true |
「sys_tablecolumns」システムテーブルをクエリして、特定のオブジェクトのフィールド、ディメンション、メジャーの操作を開始するために必要なすべての情報(SQL 準拠のデータ型、フィールドサイズなど)を取得できます。
SELECT * FROM sys_tablecolumns WHERE TableName = 'Account';
| CatalogName | SchemaName | TableName | ColumnName | DataType | DataTypeName | Length |
|---|---|---|---|---|---|---|
| CData | Salesforce | Account | Id | 12 | VARCHAR | 2000 |
| CData | Salesforce | Account | IsDeleted | 16 | BIT | 1 |
| CData | Salesforce | Account | Name | 12 | VARCHAR | 2000 |
| CData | Salesforce | Account | BillingStreet | 12 | VARCHAR | 2000 |
| CData | Salesforce | Account | BillingCity | 12 | VARCHAR | 2000 |
| CData | Salesforce | Account | BillingState | 12 | VARCHAR | 2000 |
| CData | Salesforce | Account | BillingPostalCode | 4 | INT | 4 |
| CData | Salesforce | Account | BillingCountry | 12 | VARCHAR | 2000 |
| CData | Salesforce | Account | BillingLatitude | 12 | VARCHAR | 2000 |
| CData | Salesforce | Account | BillingLongitude | 12 | VARCHAR | 2000 |
| CData | Salesforce | Account | BillingGeocodeAccuracy | 12 | VARCHAR | 2000 |
| CData | Salesforce | Account | Phone | 12 | VARCHAR | 2000 |
| CData | Salesforce | Account | Fax | 12 | VARCHAR | 2000 |
| CData | Salesforce | Account | CreatedDate | 93 | TIMESTAMP | 8 |
| CData | Salesforce | Account | CreatedById | 12 | VARCHAR | 2000 |
| CData | Salesforce | Account | LastModifiedDate | 93 | TIMESTAMP | 8 |
| CData | Salesforce | Account | LastModifiedById | 12 | VARCHAR | 2000 |
ドライバをインストールすれば、SaaS データをリレーショナルデータベースと同様に扱えます。確立されたデータベースのスキルとワークフローを再利用することで、統合プロジェクトを迅速化し、データエンジニアリングチーム内のコラボレーションを簡素化できます。
結合、更新、集約などをサポートする標準 SQL クエリを記述できます。CData ドライバは、ソースに欠けている機能を補完します。
SELECT Account.Id, Account.Name, Account.Fax,
Opportunity.AccountId, Opportunity.CloseDate
FROM Account
INNER JOIN Opportunity
ON Account.Id = Opportunity.AccountId
SELECT Name, AVG(AnnualRevenue) FROM Account GROUP BY Name
UPDATE Account SET Name='John' WHERE Id = @myId
CData がドライバとコネクタを開発・維持しているため、基盤となる API の変更からアプリケーションを保護します。これにより、新しい API バージョンごとにコードをリファクタリングする必要が減ります。さらに、SQL インターフェースを使用することで、多数の API を扱う際によく生じる学習曲線やコードの重複を最小限に抑えられます。
CData のドライバとコネクタは、複雑な認証スキームを管理します。認証を簡素化する方法については、OAuth 入門をご覧ください。
JSON ドキュメントなどの NoSQL ソースへの SQL アクセスには、データの読み書きをサポートするインテリジェントなモデリングが必要です。JSON や Elasticsearch などの NoSQL データ、および Google Analytics のような多次元データのリレーショナルモデルの構築方法については、ナレッジベース記事をご覧ください。
CData は、JSON や XML などの形式の階層型半構造化データを表形式モデルにレンダリングするために、さまざまなフラット化技術を使用します。ネストされたフィールドはドット「.」またはアンダースコア「_」表記で構造的なアイデンティティを維持し、配列オブジェクトはインデックスで識別されます。以下に、サンプル JSON ドキュメントと CData ドライバおよびコネクタによって作成された表形式モデルを示します。可能な場合は、行スキャンを使用してデータ型を判定します。
{
"_id" : ObjectId("5780046cd5a397806c3dab38"),
"address" : {
"building" : "1007",
"coord" : [-73.856077, 40.848447],
"street" : "Morris Park Ave",
"zipcode" : "10462"
},
"borough" : "Bronx",
"cuisine" : "Bakery
}
JSON データの表形式スキーマ
| 列名 | データ型 | サンプル値 |
|---|---|---|
| _id | VARCHAR | 5780046cd5a397806c3dab38 |
| address_building | INT | 1007 |
| address_coord_0 | FLOAT | -73.856077 |
| address_coord_1 | FLOAT | 40.848447 |
| address_street | VARCHAR | Morris Park Ave |
| address_zipcode | INT | 10462 |
| borough | VARCHAR | Bronx |
| cuisine | VARCHAR | Bakery |
注: address_building と address_zipcode は、サンプルデータに基づいてスキャンされ、INT 型と判定されています。コレクションにより多くの値が存在する場合、現実的にはこれらの項目が数値以外になる可能性があるため、データ型は異なる可能性があります。
JSON モデリング技術とカスタマイズオプションの詳細については、ナレッジベース記事(NoSQL 統合のための最先端ドライバ)をご覧ください。
Elasticsearch などの他の NoSQL ソースや、Google Analytics のような多次元データのモデリング技術について説明した他の記事もあります。
多くのドライバは、インメモリまたは永続的なキャッシュを提供します。この機能は、頻繁に繰り返されるクエリの結果を保存することでパフォーマンスを向上させ、冗長な API 呼び出しを排除します。キャッシュレイヤーは、データに繰り返しアクセスする必要がある大規模な分析やレポートシナリオで大きなメリットとなります。
データの読み書きに関してパフォーマンスを向上させるドライバの主要な機能として、クエリのプッシュダウンとページング/バッチ操作サポートの 2 つがあります。
多くのサービス、SaaS アプリケーション、データストアは、SQL 風のインターフェースや、API またはプロトコル内でのフィルタ、集約とグループ化、結合などの詳細なサポートを通じて、複雑なクエリをサポートしています。CData ドライバは、可能な限り複雑な SQL 機能をデータソースにプッシュダウンします。例:
CData では、次のようなクエリを使用できます:
SELECT * FROM Employees WHERE ID = 'A1245'
このクエリは、OData サービスの場合、次の URL への GET リクエストに変換されます:
http://host/service/Employees(ID='A1245')
各ドライバはそのデータソースに特化して設計されているため、この機能は各 API、プロトコル、サービスに対して可能な限り深く実装されています。
開発者は API が存在して以来、API 呼び出しを書いてきました。しかし、大きなデータセットを取得するには、複数の「ページ」のデータを収集、解析、再結合して完全なデータセットを作成する必要があります。CData ドライバは、データのページネーションを自動的に処理し、リクエスト元のアプリケーションまたはフレームワークに表示する前にメモリ内で結合します。これにより、シームレスなエクスペリエンスと、多くの場合より高速なデータ取得が実現します。
バッチまたはバルク操作は、サービスやアプリケーションが大きなデータセットを配信(または受信)するために使用するもう 1 つのメカニズムです。通常、このフローには複数の呼び出しが必要です。バッチの構築を開始するリクエスト、ジョブが完了するまでの状態を確認する複数の後続リクエスト、そしてコンパイルされたデータセットを取得する最終リクエストです。ほとんどのエンドポイントで、CData ドライバは複数のリクエストと複数のレスポンスの処理を必要とせず、SQL の単一の SELECT リクエストでこのフローを自動的に処理します。
Magento のような e コマース SaaS プラットフォームを考えてみましょう。地域別の上位支出顧客リストを生成したい場合、JOIN、GROUP BY、SUM を使用した SQL クエリを発行するだけで、1 ステップでデータを集約できます。標準ベースのドライバがなければ、各データエンドポイントに個別のロジックを記述する必要があり、開発時間とメンテナンスのオーバーヘッドが増加します。
標準ベースのドライバを使用することで、データ開発者は幅広いデータソースへの接続の複雑さを排除し、アプリケーションの構築と保守をより迅速かつ容易にできます。