ADO.NET Provider for Elasticsearch

Build 20.0.7654

自動スキーマ検出

本製品 は、Elasticsearch タイプのマッピングを取得することで、リレーショナルスキーマを自動的に推測します。カラムおよびデータ型は取得されたマッピングから生成されます。

配列の検出

Elasticsearch のあらゆるフィールドは、値の配列となることができますが、これはマッピング中では明示的に定義されてはいません。これに対応するため、本製品 はデータをクエリして、配列を含むフィールドがあるかどうかを調べます。 この配列スキャンのために取得するElasticsearch ドキュメントの数はRowScanDepth プロパティで設定されます。

Elasticsearch のネストされたタイプは、オブジェクトの配列を表す特別なタイプであり、そのためメタデータの生成ではそのように扱われます。

カラムの検出

検出プロセスで特定されるカラムはFlattenArrays およびFlattenObjects によります。

データセットの例

これらのオプションがどう動作するかの例として、次のマッピングを考えます(テーブル名は'insured' です)。

{
  "insured": {
    "properties": {
      "name": { "type":"string" },
      "address": {
        "street": { "type":"string" },
        "city": { "type":"string" },
        "state": { "type":"string" }
      },
      "insured_ages": { "type": "integer" },
      "vehicles": {
        "type": "nested",
        "properties": {
          "year": { "type":"integer" },
          "make": { "type":"string" },
          "model": { "type":"string" },
          "body_style" { "type": "string" }
        }
      }
    }
  }
}

また、上の例において、次のサンプルデータを考えてください:

{
  "_source": {
    "name": "John Smith",
    "address": {
      "street": "Main Street",
      "city": "Chapel Hill",
      "state": "NC"
    },
    "insured_ages": [ 17, 43, 45 ], 
    "vehicles": [
      {
        "year": 2015,
        "make": "Dodge",
        "model": "RAM 1500",
        "body_style": "TK"
      },
      {
        "year": 2015,
        "make": "Suzuki",
        "model": "V-Strom 650 XT",
        "body_style": "MC"
      },
      {
        "year": 2012,
        "make": "Honda",
        "model": "Accord",
        "body_style": "4D"
      }
    ]
  }
}

FlattenObjects の使用

FlattenObjects が設定されている場合、すべてのネストされたオブジェクトは連続したカラムにフラット化されます。上記の例は、次のカラムとして表示されます:

カラム名 データ型 サンプル値
name String John Smith
address.street String Main Street
address.city String Chapel Hill
address.state String NC
insured_ages String [ 17, 43, 45 ]
vehicles String [ { "year":"2015", "make":"Dodge", ... }, { "year":"2015", "make":"Suzuki", ... }, { "year":"2012", "make":"Honda", ... } ]

FlattenObjects が設定されていない場合、address.street、address.city、およびaddress.state カラムは別々にはなりません。文字列型の住所カラムは一つのオブジェクトとして表されます。 値は次のようになります:

{street: "Main Street", city: "Chapel Hill", state: "NC"}
JSON アグリゲートの詳細についてはJSON 関数 を参照してください。

FlattenArrays の使用

FlattenArrays プロパティは配列の値をフラット化してそれぞれのカラムとするために使われます。これは配列が短い場合にのみ推奨されます。アンバウンドの配列をそのままにしておき、必要な際にJSON 関数 を使ってデータを取り出すことをお勧めします。

Note:一番上の配列のみがフラット化されます。サブ配列は、配列全体として表示されます。

FlattenArrays プロパティは3に設定して上の例の配列を次のように表すことができます(この例ではFlattenObjects は設定されていません):

カラム名 データ型 サンプル値
insured_ages String [ 17, 43, 45 ]
insured_ages.0 Integer 17
insured_ages.1 Integer 43
insured_ages.2 Integer 45
vehicles String [ { "year":"2015", "make":"Dodge", ... }, { "year":"2015", "make":"Suzuki", ... }, { "year":"2012", "make":"Honda", ... } ]
vehicles.0 String { "year":"2015", "make":"Dodge", "model":"RAM 1500", "body_style":"TK" }
vehicles.1 String { "year":"2015", "make":"Suzuki", "model":"V-Strom 650 XT", "body_style":"MC" }
vehicles.2 String { "year":"2012", "make":"Honda", "model":"Accord", "body_style":"4D" }

FlattenObjects とFlettenArrays を両方使う

FlattenObjectsFlattenArrays が同時に設定されている(brevity は1)場合、vehicle フィールドは次のように表されます:

カラム名 データ型 サンプル値
vehicles String [ { "year":"2015", "make":"Dodge", ... }, { "year":"2015", "make":"Suzuki", ... }, { "year":"2012", "make":"Honda", ... } ]
vehicles.0.year String 2015
vehicles.0.make String Dodge
vehicles.0.model String RAM 1500
vehicles.0.body_style String TK

Copyright (c) 2020 CData Software, Inc. - All rights reserved.
Build 20.0.7654