JDBC でSaaS、ビッグデータ、NoSQL のメタデータを取得する



データの理解は、分析から変換、保存、レプリケーションまで、あらゆるプロセスにおいて重要です。JDBC 標準は、Java アプリケーションからプログラム的に、または JDBC 対応ツールやアプリケーションを通じて、データベースのメタデータにアクセスするための簡単な方法を提供します。CData JDBC Driver を使用すれば、110以上のデータソースのメタデータにアクセスでき、RDBMS、SaaS、ビッグデータ、さらには NoSQL データをリレーショナルモデルとして扱うことができます。

この記事では、CData JDBC Driver を Java コードで使用してデータソースに接続し、メタデータを取得・表示する方法を解説します。これにより、データへの理解を深め、より効果的に活用できるようになります。サンプルコードでは CData JDBC Driver for Salesforce を使用していますが、同じ原則はすべての CData JDBC Driver に適用できます。

データへの接続



データソースのメタデータを取得するには、まずデータソースに接続する必要があります。CData JDBC Driver をまだインストールしていない場合は、30日間の無料トライアルをダウンロードしてください。実際のデータがあるデータソース用のドライバーを使用してください。

ドライバーをダウンロードしてインストールしたら、データに接続する準備が整います。新しい Java プロジェクトを作成し、JDBC ドライバーをビルドパスに追加します。

  • Eclipse の場合:
    1. プロジェクトを右クリックし、Build Path -> Add External Archives を選択します。
    2. JDBC Driver の JAR ファイル(例:cdata.jdbc.salesforce.jar)を指定します。
  • IntelliJ の場合:
    1. プロジェクトを右クリックし、Open module を選択します。
    2. Project Settings の Libraries に移動し、Add をクリックして JDBC JAR ファイルを追加します。

ドライバーをビルドパスに追加したら、データソースに接続するためのコードを見ていきましょう。まず、ドライバーをロードし(JDBC 4.0 以降では任意)、DriverManager クラスを使用してデータソース(ここでは Salesforce)への接続を作成します。接続するには、必要な接続プロパティと値を渡した JDBC URL を設定する必要があります(必要なプロパティの詳細は、各データソースのオンラインヘルプドキュメントを参照してください):

String sfURL = "jdbc:salesforce:User=user@domain.com;Password=my_sf_password;SecurityToken=my_sf_security_token;";

//任意
Class.forName("cdata.jdbc.salesforce.SalesforceDriver");

Connection sfConn = DriverManager.getConnection(sfURL);

接続が作成できたら、データソースのメタデータを取得していきましょう。

テーブルとビューの取得



Java の DatabaseMetaData インターフェースの getTables メソッドを使用すると、データソースからテーブルの一覧を取得できます。データソースによって、これらのテーブルやビューは様々なデータセットを表します。SaaS API のシンプルな REST エンドポイントから、NoSQL データベースによく見られる階層データ構造まで、多岐にわたります。CData ドライバーは、データソースに関係なく、わかりやすいデータモデルを提供するように設計されています。以下のコードで Salesforce からテーブルとビューの完全な一覧を取得できます:

サンプルコード

  //メタデータを取得
  DatabaseMetaData sfMeta = sfConn.getMetaData();

  //すべてのテーブルとビューを取得
  ResultSet rs = sfMeta.getTables(null, null, "%", null);

  //結果を出力
  while (rs.next()) {
    System.out.println(rs.getString("TABLE_NAME"));
  }
  

出力例

  AcceptedEventRelation
  Account
  AccountCleanInfo
  AccountContactRole
  ...
  VerificationHistory
  VisualforceAccessMetrics
  Vote
  WebLink
  

結果をテーブル、ビュー、システムテーブル、またはそれらの組み合わせに限定したい場合は、getTables メソッドの type パラメータに文字列配列を渡します:

  • テーブルgetTables(null, null, "%", new String[]{"TABLE"})
  • ビューgetTables(null, null, "%", new String[]{"VIEW"})
  • システムテーブルgetTables(null, null, "%", new String[]{"SYSTEM TABLE"})

上記のサンプルコードではテーブル名のみを表示しています。参考までに、getTables メソッドは以下のカラムを返します:

カラム名 データ型 説明
TABLE_CAT String テーブルカタログ
TABLE_SCHEM String テーブルスキーマ
TABLE_NAME String テーブル名
TABLE_TYPE String テーブルタイプ
REMARKS String テーブルの説明

データソースのテーブルを把握したら、getColumns メソッドを使用して、指定したテーブルのカラム情報を取得できます。

カラムの取得



Java の DatabaseMetaData インターフェースの getColumns メソッドを使用すると、データソースの選択したテーブルからカラムの一覧を取得できます。tableNamePattern パラメータを使用すると、テーブル名で結果を絞り込むことができます。CData ドライバーがサポートする SaaS、ビッグデータ、NoSQL データソースでは、既存のデータ構造(SaaS API の REST レスポンスの一部や NoSQL ドキュメントの構造内の個々の要素など)がドライバーの設定に基づいて解析され、データソースに関係なくデータベースのようなモデルとして提供されます。以下のコードサンプルで、Salesforce の Account テーブルのカラム一覧を取得します:

サンプルコード

  //メタデータを取得
  DatabaseMetaData sfMeta = sfConn.getMetaData();

  //"Account" テーブルのカラムを取得
  ResultSet rs = sfMeta.getColumns(null, null, "Account", null);

  //結果を出力
  while (rs.next()) {
    System.out.println(rs.getString("COLUMN_NAME"));
  }
  

出力例

  Id
  IsDeleted
  MasterRecordId
  Name
  ...
  NumberofLocations__c
  UpsellOpportunity__c
  SLASerialNumber__c
  SLAExpirationDate__c
  

「__c」で終わるカラムに注目してください。これらは JDBC ドライバーを通じて Salesforce API から取得されたカスタムカラムです。ドライバーはメタデータを動的に取得してカラムを検出するため、カスタムフィールドの追加や削除は再接続時に反映されます。

サンプルコードでは、リクエストしたテーブルのカラム名のみを表示しています。参考までに、getColumns メソッドは取得した各テーブルに対して以下のカラムを返します:

カラム名 データ型 説明
TABLE_CAT String データベース名
TABLE_SCHEM String テーブルスキーマ
TABLE_NAME String テーブル名
COLUMN_NAME String カラム名
DATA_TYPE int java.sql.Types で定義された定数の値で識別されるデータ型
TYPE_NAME String ドライバーが使用するデータ型名
COLUMN_SIZE int カラムの文字数または数値精度
BUFFER_LENGTH int バッファ長
DECIMAL_DIGITS int カラムのスケールまたは小数点以下の桁数
NUM_PREC_RADIX int 基数
NULLABLE int カラムが null を許容するかどうか。JDBC DatabaseMetaData 定数で定義:columnNoNulls (0) または columnNullable (1)
REMARKS String カラムの説明
COLUMN_DEF String カラムのデフォルト値
SQL_DATA_TYPE int 仕様により予約済み
SQL_DATETIME_SUB int 仕様により予約済み
CHAR_OCTET_LENGTH int バイナリおよび文字ベースのカラムの最大長
ORDINAL_POSITION int カラムのインデックス(1から開始)
IS_NULLABLE String null 値が許容されるかどうか:YES または NO
SCOPE_CATALOG String 参照属性のスコープとなるテーブルカタログ
SCOPE_SCHEMA String 参照属性のスコープとなるテーブルスキーマ
SCOPE_TABLE String 参照属性のスコープとなるテーブル名
SOURCE_DATA_TYPE int DISTINCT 型のソース型、またはユーザー生成の Ref 型。DATA_TYPE が DISTINCT でない場合、この値は null。ユーザー生成の Ref の場合も null
IS_AUTOINCREMENT String Salesforce によってカラム値が固定増分で割り当てられるかどうか
IS_GENERATEDCOLUMN String カラムが生成されたものかどうか:YES または NO
ISREADONLY boolean カラムが読み取り専用かどうか
ISKEY boolean カラムがキーかどうか

データソースのテーブルとカラムを把握できたら、データに対して分析、変換、その他の操作を効果的に実行する準備が整います。

あらゆるデータソースのメタデータ取得



CData では、110以上の SaaS、ビッグデータ、NoSQL データソースに対応した JDBC Driver を提供しており、データソースのメタデータを簡単に取得できます。すべてのドライバーが JDBC 標準に準拠しているため、データソースに関係なく一貫したメタデータクエリを実行できます。革新的なデータ処理機能により、CData ドライバーは NoSQL データに対しても信頼性の高いデータベースのようなモデルを提供します。30日間の無料トライアルをダウンロードして、CData の違いをぜひ体験してください。

始める準備はできましたか?

CData JDBC Drivers の無料トライアルをダウンロード:

今すぐダウンロード