JP6416194B2 - 半構造データのためのスケーラブルな分析プラットフォーム - Google Patents
半構造データのためのスケーラブルな分析プラットフォーム Download PDFInfo
- Publication number
- JP6416194B2 JP6416194B2 JP2016503110A JP2016503110A JP6416194B2 JP 6416194 B2 JP6416194 B2 JP 6416194B2 JP 2016503110 A JP2016503110 A JP 2016503110A JP 2016503110 A JP2016503110 A JP 2016503110A JP 6416194 B2 JP6416194 B2 JP 6416194B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- schema
- index
- user
- objects
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/211—Schema design and management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/235—Update request formulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/254—Extract, transform and load [ETL] procedures, e.g. ETL data flows in data warehouses
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
- G06F16/84—Mapping; Conversion
- G06F16/86—Mapping to a database
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
分析プラットフォームは、アドホックで、探索的な、対話型分析をサポートするための高速クエリ応答時間を提供する。ユーザは、クエリを発行し、その日か翌日に結果を見るために戻る必要なく、このシステムを用いて、データに隠れた洞察を素早く発見することができる。分析プラットフォームは、採集したデータを全てインデックスで記憶するインデックスストアに依存しており、高速応答時間を可能にしている。
分析プラットフォームは、データ自体からスキーマを推論するので、ユーザは、推測的に予測スキーマを知る必要はなく、データがロードされる前にスキーマを予め宣言する必要もない。半構造データは、経時的に、また、ソースが異なることによって構造が変わり得る。よって、エンジンは、データが到着すると、動的に、そのデータからスキーマ(または、構造)を計算し、更新する。この計算されたスキーマに基づいた関係スキーマがユーザに提示され、ユーザはそれを用いて、クエリを構成する。
分析プラットフォームは、標準SQLクエリインタフェース(例えば、ANSI SQL 2003に対応したインタフェース)を公開するので、ユーザは、既存のSQLツール(例えば、報告ツール、視覚化ツール、及び、BIツール)及び専門知識を活用することができる。結果として、SQLまたはSQLツールを熟知したビジネスユーザは、データウェアハウスをロードする必要なく、半構造データに直接アクセスやクエリを行うことができる。従来のSQLベースツールは、JSONや他の半構造データフォーマットを扱わないので、分析プラットフォームは、JSONオブジェクトの計算されたスキーマの関係ビューを提示する。分析プラットフォームは、正規化ビューを提示し、最適化を組み込んで、ビューのサイズを管理する。関係ビューは、スキーマで幾つかのテーブルを提示してよいが、これらのテーブルは必ずしも具体化される必要はない。
分析プラットフォームは、大きいデータセットサイズを取り扱うためにスケーリングされる。分析プラットフォームは、内部データ構造と処理を、独立ノードに、自動的に、動的に分散させることができる。
分析プラットフォームは、その内容を、Hadoop分散ファイルシステム(HDFS)、Amazonシンプルストレージサービス(S3)、及び、MongoDB等のnoSQLストアのようなレポジトリからのソースデータと自動的に同期して、複製するように構成することができる。これらのソースについては、変更、追加、更新を絶えず監視することができるので、分析プラットフォームは、変更されたデータを採集することができる。これによって、クエリ結果を、比較的最新のものにすることができる。
分析プラットフォームは、データがソースに出現することに応答して、以下のアクションを行う。(1)そのデータから統合された半構造(JSON等)スキーマを推論(2)そのスキーマについて関係ビューを作成(3)物理的インデックスにデータをポピュレート(4)そのインデックスを活用するクエリを実行。アクション1、2、3の一部または全ては、データソースからのデータを通るパスを一度だけにできるように、パイプライン化されてよい。
JSONは、ますます、普及している自己記述的な半構造データフォーマットで、インターネットでのデータ交換に広く用いられている。本明細書では、説明のためにJSONを記載しており、以下の例も、JSONフォーマットを用いて記載しているが、本開示は、JSONに限定されない。
{"player": { "fname": "George", "lname": "Ruth", "nickname":
"Babe"}, "born": "February 6, 19 85",
"avg": 0.342, "HR": 714,
"teams": [ { "name": "Boston Red Sox", "years": "1914-1919"
},
{ "name": "New York Yankees", "years": "1920-1934" },
{ "name": "Boston Braves", "years": "1935" } ] }
{ "player": { "fname": "Sandy", "lname": "Koufax"}, "born":
"December 30, 19 35",
"ERA": 2.76, "strikeouts": 2396,
"teams": [ { "name": "Brooklyn / LA Dodgers", "years": "1955-
1966" } ] }
となる。
{ "player": { "fname": string, "lname": string, "nickname":
string }, "born": string, "avg": number, "HR": number, "ERA":
number, "strikeouts": number,
"teams": [ { "name": string, "years": string } ] }
となる。
ユーザは、データセットの質問をする前に、スキーマを知る必要がある、すなわち、クエリを行うのにどんなフィールドまたは次元が利用可能かを知る必要がある。多くの場合、分析者は、データの生成に関わっておらず、何が記録されていて、何が入手可能か、分からない。例えば、上記の野球の例では、分析者は、打者がコレクション内で観察された場合のみ、“ERA”フィールドが利用可能なことを知らない場合がある。従って、分析プラットフォームは、採集したデータから統合スキーマを計算(または、推論)し、スキーマの関係ビューを提示して、分析者がクエリを生成するのを支援する。
S_new = merge(S_curr, type(O_new))
とする。
以下の例の一部は、firehoseと言うツイッター(Twitter)からのデータストリームの出力に似たデータを使用している。ツイッターfirehoseは、「ツイートされた」ツイートと、それらのツイートのメタデータ(例えば、ユーザ、場所、トピックなど)とを表すJSONオブジェクトのストリーム(終わりのないシーケンス)を供給する。これらのツイートは、現代のウェブフレームワーク(例えば、Ruby on Rails)、モバイルアプリケーション、センサ、及び、装置(電力計、サーモスタット)などで生成されるような、多くの他の型のイベントログデータと類似している。下記の例は、ツィッターデータと類似しているが、説明目的のために、実際のツイッターデータとは異なっている。
{ "created_at": "Thu Nov 08", "id": 266353834,
"source": "Twitter for iPhone",
"text": "@ilstavrachi: would love dinner. Cook this:
http://bit.ly/955Ffo",
"user": { "id": 29471497, "screen_name": "Mashah08" },
"favorited": false}
{ "created_at": string, "id": number, "source": string, "text":
string,
"user": { "id": number, "screen_name": string }, "favorited":
boolean }
となる。
{ "created_at": "Thu Nov 10", "id": "266353840",
"source": "Twitter for iPhone",
"text": "@binkert: come with me to @ilstavrachi place",
"user": { "id": 29471497, "screen_name": "Mashah08" },
"retweet_count": 0 }
となる。
{ "created_at": string, "id": number, "id": string, "source":
string, "text": string,
"user": { "id": number, "screen_name": string },
"retweet_count": number }
{ "created_at": "Thu Nov 10", "id": "266353875",
"source": "Twitter for iPhone",
"text": "@binkert: come with me to @ilstavrachi place",
"user": { "id": "29471755", "screen_name": "mashah08",
"location": "Saratoga, CA", "followers_count": 22 },
"retweet_count": 0 }
{ "created_at": string, "id": number, "id": string, "source":
string, "text": string,
"user": { "id": number, "id": string, "screen_name": string,
"location": string, "followers_count": number },
"retweet_count": number }
JSONレコードには空のオブジェクトまたはヌルフィールドが、存在し得る。例えば、人の座標(緯度及び経度)のレコードが、
{ "coordinates": {} }
の場合、
スキーマは、下記のように、全く同じ型になる。
{ "coordinates": {} }
厳密に言うと、{}は、インスタンスと呼ばれ、型は、オブジェクトである。本開示の実施例及び説明は、説明を容易にするために厳密なJSONとは異なっている。
{ "geo": null }
は、全く同じ型
{ "geo": null }
を有する。
{ "coordinates": {} }
{ "coordinates": {"type": "Point"} }
から、下記のスキーマが生成される。
{ "coordinates": {"type": string} }
{ "geo": null }
{ "geo": true }
は、下記のスキーマを生成する。
{ "geo": boolean }
ツイートは、ハッシュタグ(強調されるトピックの単語)、url、他のツイッターユーザの記載等の項目を含むことが多い。ツイッターfirehoseは、例えば、ツイートのJSONオブジェクトに含めるために、自動的にこれらの項目を構文解析し、抽出してよい。下記の例では、ハッシュタグのメタデータを用いて、配列のスキーマをどのように推論するかを説明する。
"#donuts #muffins #biscuits"
これらのオフセットは、下記の配列で表してよい。
{ "offsets": [0, 8, 17] }
{ "offsets": [number] }
である。
{ "tags": [0, "donuts", 8, "muffins", 17, "biscuits"] }
対応するスキーマは、下記のように、配列に両方の型を含む。
{ "tags": [ number, string ] }
{ "tags": ["donuts", 0, "muffins", 8, "biscuits", 17] }
“tags”配列は、文字列、数字のどちらも含むことができるので、結果として生じるスキーマは、
{ "tags": [ string, number ] }
となる。
{ "tags": ["donuts", "muffins", "biscuits"] },
{ "tags": [0, 8, 17] }
“tags”に関する2つのスキーマがある。
{ "tags": [string] } and { "tags": [number] }
この場合、配列は、同じ深さにあるので、マージして、上記と同じスキーマを生成することができる。
{ "tags": [ string, number ] }
{ "tags": [string, number] }
{ "tags": [number, string] }
これは、型のリストがセットとして扱われたからである。配列要素の型は、可能な場合、マージされ、マージは、配列内の、オブジェクト及び配列に対してさらに行われる。様々な他の実装において、(配列及びオブジェクトの両方における)型の順序、及び、型間の依存性は、保存することができる。しかしながら、これによって、スキーマの簡潔さは低下する。
ネストされたオブジェクトを説明するために、開始オフセットと終了オフセットの両方が下記のように記録されているとしよう。
{ "tags": [{ "text": "donuts", "begin": 0 }, { "text": "donuts",
"end": 6 }]}
結果として生じるスキーマは、
{ "tags": [{"text": string, "begin": number,
"end": number }〕 }
となる。
このように、オブジェクト型は、配列要素を別個に型付けせずに、マージされる。
{ "tags": [ [ "donuts", "muffins" ], [0,8] ] } ==>
{ "tags": [[string], [number]]},
スキーマは、さらに、縮小されて、
{ "tags": [[string, number]]}
となる。
これは、本開示の様々な実装において行われる、スキーマの正確さと、スキーマの簡潔さとの間のトレードオフである。
{ "parsed": { "tag": {}, "tag": { "offset": number } } }
=> { "parsed": { "tag": { "offset": number }}
同様に、配列に関するマージ規則を用いて、下記のスキーマ縮小を行う。
{ "tags": [[], [ number ]] } => { "tags": [[ number ]] }
{ "tags": [[], [[]]] } => { "tags": [[[]]] }
{ "tags": [[], [[]], [number]] } => { "tags": [[[]], [number]] }
=> { "tags": [[[], number]]] }
以前のスキーマと新しいオブジェクトから新しいスキーマを作成するために、分析プラットフォームは、最初に、新しいオブジェクトを型付け(すなわち、新しいオブジェクトのスキーマを計算)する。この手順は、型付けのための標準的意味論(canonical semantics)を特定することを意図しており、特定の実装を記載することを意図したものではない。下記の記載において、変数v,w,v_j,w_jは、任意の有効なJSON値の範囲に亘ってよく、j,k,j_m,k_nは、有効な文字列に亘ってよい。型付けの基本的規則は、下記のようになる。
type(scalar v) = scalar_type of v
type({ k_l: v_l, ..., k_n: v_n }) =
collapse({ k_l: type(v_l), ..., k_n: type(v_n) })
type([ v_1, ..., v_n ]) =
collapse([ type(v_l), type(v_n) ])
collapse({ k_l: v_l, ..., k_n: v_n }):
while k_i == k_j:
if v_i, v_j are scalar types and v_i == v_j OR
v_i, v_j are objects OR v_i, v_j are arrays:
replace {..., k_i: v_i, ..., k_j: v_j, ...}
with {..., k_i: merge(v_i, v_j), ...}
collapse ( [ v_l, ..., v_n ] ) :
while v_i, v_j are scalar types and v_i == v_j OR
v_i, v_j are objects OR v_i, v_j are arrays:
replace [..., v_i, ..., v_j, ...]
with [..., merge(v_i, v_j), ...]
merge(v, v) = v
merge({}, { k_l: v_l, ..., k_n: v_n }) = { k_l: v_l, ..., k_n: v_n }
merge({ j_l: v_l, ..., j_n: v_n }, { k_l: w_l, ..., k_m: w_m } )
= collapse({ j_l: v_l,_ ..., j_n: v_n, k_l: w_l, ..., k_m: w_m
} )
merge([], [v_l, ..., v_n]) = [v_l, ..., v_n]
merge([v_l, ..., v_n], [w_l, ..., w_m])
= collapse([v_l, ..., v_n w_l, ..., w_m])
merge ( { "coordinates": { } }, { "coordinates": null },
{ "coordinates": [] } )
= { "coordinates": { }, "coordinates": [],"coordinates"null }
JSONのヌル(null)は、数字の9が値であるように、値である。関係では、NULLは、特定された値がなかったことを示す。SQLにおいては、ヌル値は、tags<null>:booleanで表される。ここで、Boolean値は、ヌル値が存在すれば、真(True)であり、さもなければ、NULLである。SQLユーザのためのスキーマを単純化するために、ユーザが、JSONのヌル値とSQLのヌル値とを区別する必要がない場合、coordinates<null>カラムは、省略することができる。
上記の簡単な規則を用いると、深くネストされたJSONレコードを型付けすることが可能である。例えば、ウェブページのページビュー統計を表す複雑な仮想(hypothetical)レコードを考える。
{ "stat": [ 10, "total_pageviews", { "counts": [1, [3]],
"page_attr": 7.0 }, { "page_attr": ["internal"]} ]}
下記のスキーマが生成される。
{ "stat": [number,
string,
{ "counts": [number, [number]]
"page_attr": number,
"page_attr": [string]
}〕}
{
"type": "object",
"properties": {
"stat": {
"items": {
"type": [
"number",
"string",
{
"type": "object",
"properties": {
"counts": {
"items": {
"type": [
"number",
{
"items": {
"type": "number"
},
"type": "array"
}
〕
},
"type": "array"
},
"page_attr": {
"type": [
" “number",
{
"items": {
"type": "string"
},
"type": "array"
}
〕
}
}
}
〕
},
"type": "array
}
}
}
開発者及び分析者は、多くの異なる目的のために、JSONオブジェクトと配列を使用することができる。特に、JSONオブジェクトは、オブジェクト及び「マップ」の両方として、頻繁に用いられる。例えば、開発者は、フィールドが日付で、値がページビューのような収集された統計である、オブジェクトを作成するかもしれない。別の実施例は、フィールドがユーザidで、値がプロファイルである。これらの場合、オブジェクトは、静的オブジェクトというよりもマップデータ構造に近い。フィールド名はとても多いので、ユーザは、可能なフィールド名を必ずしも知っているわけではなく、フィールド名は動的に作成される。結果として、ユーザは、値をクエリするのと同じように、フィールドをクエリしたい場合がある。
ソースデータセットにおけるJSONオブジェクトのスキーマが推論された後、分析プラットフォームは、SQLユーザ及びSQLベースのツールに公開することができる関係スキーマを生成する。目標は、JSONスキーマにおける包含関係を表す簡潔なスキーマを作成する一方で、ユーザに標準SQLの能力を与えることである。この関係スキーマは、装飾されたJSONスキーマから生成され、基礎的半構造データセット上のビューである。変換を行うための一般化手順を記載する前に、どのようにJSONスキーマが関係ビューに変換されるかについての幾つかの実施例を記載する。
最も単純な実施例は、下記のスキーマ等の、簡単なスカラ型を有するオブジェクトである。
{ "created_at": string, "id": number, "text": string,
"source": string, "favorited": boolean }
この場合、オブジェクトのフィールドは、関係のカラムに直接的に翻訳する。
Root(created_at: str, id: num, text: str, source: str, favorited:
bool)
{ "created_at": string, "id": number, "id": string, "text":
string, "source": string, "favorited": boolean }
結果として生じる関係スキーマは、下記のように別個の"id"と、"id"カラムとを有することになる。
Root(created_at: str, id<num>: num, id<str>: str,
source: str, text: str, favorited: bool)
ネストされたオブジェクトは、外部キー関係と新たな関係を作り出す。例えば、JSONスキーマを考える。
{ "created_at": string, "id": number, "source": string, "text":
string,
"user": { "id": number, "screen_name": string },
"favorited": boolean }
対応する関係スキーマは、
Root(created_at: str, id: num, source: str, text: str, favorited:
bool, user: join_key)
Root.user(id_jk: join_key, id: num, screen_name: str)
である。
{ "created_at": string, "id": number, "source": string, "text":
string,
"user": { "id": number, "screen_name": string },
"retweeted_status": { "created_at": string, "id": number,
"user": { "id": number, "screen_name": string } },
"favorited": boolean }
対応する関係ビューは、下記のようになる。
Root(created_at: str, id: num, source: str,
text: str, favorited: bool,
user: join_key, retweeted_status: join_key)
Root.user(id_jk: join_key, id: num, screen_name: str)
Root.retweeted_status(id_jk: join_key, created_at: str, id: num,
user: join_key)
Root.retweeted_status.user(id_jk: join_key, id: num, screen_name:
str)
。“Root.user”、“Root.retweeted_status”、及び“Root.retweeted_status.user”は、全て異なるテーブルに分かれることに留意する。
ネストされたオブジェクトの関係においては、メインのテーブルのローから、ネストされたオブジェクトのテーブルのローに、1対1関係があることが多い。結果として、これらは、カラム名についてドット付き表記を用いて、単一のテーブルに1対1に折り畳むことができる。
Root(created_at: str, id: num, source: str,
text: str, favorited: bool,
user.id: num, user.screen_name: str)
3レベルのネストされたオブジェクト例に関しては、下記のようになる。
Root(created_at: str, id: num, source: str,
text: str, favorited: bool,
user.id: num, user.screen_name: str,
retweeted_status.created_at: str,
retweeted_status.id: num,
retweeted_status.user.id: num,
retweeted_status.user.screen_name: str)
フィールドのセットをマップとして指定すること無く、対応する関係スキーマは、膨大な数のカラムを含んでよい。さらに、ユーザは、フィールド名をクエリすることを望む場合がある。例えば、ユーザは、12月の平均ページビューを見付けたいかもしれない。
O{ "page_url": string, "page_id": number,
"stat_name": string,
"metric": M{ "2012-01-01": number, "2012-01-02": number, ...,
"2012-12-01": number, ... } }
Root(page_url: str, page_id: num, stat_name: str, metric<map>:
join_key)
Root,metric<map>(id_jk: join_key, key: string, val: num)
”www.noudata.com/jobs”(page_id284)について、これらのレコードを含んでよい。
Root("www.noudata.com/jobs", 284, "page_views", 3),
Root.metric<map>(3, "2012-12-01", 50),
Root.metric<map>(3, "2012-12-02", 30), ...
{ "page_url": "www.noudata.com/blog", "page_id": 285,
"stat_name": "sentiment"
"metric": { "2012-12-01": "agreement", "2012-12-01": 5,
"2012-12-05": "anger", "2012-12-05": 2, ... } }
JSONスキーマは、
0{ "page_url": string, "page_id": number,
"stat_name": string,
"metric": M{ "2012-12-01": string, "2012-12-01": number, ...,
"2012-12-05": string, "2012-12-05": number, ... } }
となる。
Root(page_url: str, page_id: num, stat_name: str, metric<map>:
join_key)
Root,metric<map>(id_jk: join_key, key: string,
val<str>: str, val<num>: num)
Root.metric<map>(4, "2012-12-01", "agreement", NULL),
Root.metric<map>(4, "2012-12-01", NULL, 5),
Root.metric<map>(4, "2012-12-05", "anger", NULL),
Root.metric<map>(4, "2012-12-05", NULL, 2) ...
これらのマップがピボットされると、ユーザは、キーカラムに、それらが任意の他のカラムとなるように、述語及び関数を適用することができる。
基本原理は、ネストされたマップに関しても同じである。日毎及び時間毎の統計のリストを考える。
M{"2012-12-01": M{ "12:00": number,
"01:00": number,
"02:00": number,
... },
"2012-12-02": M{ ... },
... }
結果として生じるスキーマは、
Root(id_jk: join_key, key: string, val<map>: join_key)
Root.val<map>(id_jk: join_key, key: string, val<num>: num)
となる。
M{ "2012-12-01": O{ "sentiment": string,
"strength": number }
"2012-12-02": O{ ... }
... }
結果として生じる平坦化された関係スキーマは、
Root(id_jk: join_key, key: string, val<map>: join_key)
Root.val<map>(id_jk: join_key, sentiment: string,
strength: number)
となる。
空のオブジェクトが、時々、データ内に現れる。スキーマを考える。
{ "created_at": string, "id": number, "source": string, "text":
string,
"user": { "id": number, "screen_name": string } }
JSONオブジェクトは、ここに示すように、ユーザ情報を伴わずに受信され得る。
{ "created_at": "Thu Nov 08",
"id": 266353834,
"source": "Twitter for iPhone",
"text": "@ilstavrachi: would love dinner. Cook this:
http://bit.ly/955Ffo",
"user": { } }
Root("Thu Nov 08", 266353834, "Twitter for iPhone",
"@ilstavrachi: would love dinner. Cook this:
http://bit.ly/955Ffo", join_key)
Root.user(join_key, NULL, NULL)
{"id": number, "user": {}}
この場合、空のオブジェクト“user”は、マップとして処理することができ、関係スキーマは、
Root(id: num, user<map>: join_key)
Root.user<map>(id_jk: join_key, key: string)
となる。
配列は、マップと同様に処理されるので、スキーマ翻訳はかなり類似している。主な違いは、マップの文字列“key”フィールドが、配列インデックスに対応する整数型(int)の“index”フィールドに置き換えられることである。簡単な実施例は、下記であり、
{ "tags": [ string ] }
は、下記の関係スキーマにつながる。
Root(tags<arr>: join_key)
Root.tags<arr>(id_jk: join_key, index: int, val<str>: str)
{ "tags": [ number, string] }
は、下記の関係スキーマにつながる。
Root(tags<arr>: join_key)
Root.tags<arr>(id_jk: join_key, index: int,
val<num>: num, val<str>: str)
{ "tags": [{ "text": string, "offset": number }] }
結果として生じる関係スキーマは、下記のように作成することができる。
Root(tags<arr>: join_key)
Root.tags<arr>(id_jk: join_key, index: int, val: join_key)
Root.tags<arr>.val(id_jk: join_key, text: str, offset: num)
Root(tags<arr>: join_key)
Root.tags<arr>(id_jk: join_key, index: int,
val.text: str, val.offset: num)
関係スキーマは、ネストされた空の配列について、マップについてと同様の方法で作成することができる。下記のスキーマに関して、
{ "tags": [string, [number]], "urls": []}
関係スキーマは、下記のようになる。
Root(tags<arr>: join_key, urls<arr>: join_key)
Root.tags<arr>(id_jk: join_key, index: int,
val<str>: str, val<arr>: join_key)
Root.tags<arr>.val<arr>(id_jk: join_key, index: int,
val<num>: num)
Root.urls<arr>(id_jk: join_key, index: int)
上記型推論及び関係スキーマへの変換手順は、JSONにおいて利用可能である基本型に依存している。いかなる型システムを選択しても、同じ手順が、その型システムに等しく適用される。言い換えれば、分析プラットフォームは、アトミックなスカラ型が値から推論され得る限り、整数、浮動小数、及び、時間のようなより狭いスカラ型を推論することができる。BSON及びXMLは、そのような拡張された型システムを有する。さらに、様々なヒューリスティックス(正規表現など)を用いて、日付や時間などのより複雑な型を検出することができる。
int32, -> INTEGER
int64, -> INTEGER
double, -> DOUBLE PRECISION
string, -> VARCHAR
date, -> DATE
bool, -> BOOLEAN
object_id, (BSON) -> VARCHAR(24)
time -> TIME
timestamp -> TIMESTAMP
JSONスキーマから関係スキーマへの変換は、ネストされたJSONスキーマ構造の再帰的解凍を使用して達成することができる。実装例の疑似コード表現を、ここに示す。
Call for every attribute in topmost object:
attr_schema, "Root", attr_name
create_schema(json_schema, rel_name, attr_name):
/* Creates a table (relation) if it's adorned as an object */
if json_schema is object:
Add join key called attr_name to relation rel_name
new_rel = rel_name + "." + attr_name
Create relation new_rel
add (id_jk: join_key) to new_rel
/* recursively add attributes to the table (relation) */
for attr, attr_schema in json_schema:
create_schema(attr_schema, new_rel, attr)
/* Creates appropriate attrs and table for (nested) map */
else if json_schema is map:
Add join key called 'attr_name + <map>' to relation rel_name
new_rel = rel_name + "." + attr_name<map>
Create relation new_rel
Add (id_jk: join_key) and (key: string) to new_rel
/* recursively add attributes to the table (relation) */
for each distinct value type val_type in json_schema:
create_schema(val_type, new_rel, "val")
/* Creates appropriate attrs and table for array */
else if json_schema is array:
Add join key called 'attr_name + <arr>' to relation rel_name
new_rel = rel_name + "." + attr_name<arr>
Create relation new_rel
Add (id_jk: join_key) and (index: int) to new_rel
/* recursively add attributes to the table (relation) */
for each distinct item type item_type in json_schema:
create_schema(item_type, new_rel, "val")
/* Primitive type, add column to the table (relation) */
else:
If attr_name does not exist in relation rel_name:
Add column (attr_name, attr_name's type) to relation
rel_name
else
Rename attribute attr_name to attr_name + "<orignal
attr_name's type>" in relation rel_name
Add column (attr_name + "<" + attr_name's type + ">",
attr_name's type) to relation rel_name
JSON及び関係スキーマが新しいオブジェクトに応答して更新されると、オブジェクト内に含まれるデータは、以下に記載するように、インデックスに記憶することができる。
BigIndex(BI)は、配列内に埋め込まれていないデータの全フィールドを記憶するベースデータストアである。値(val)は、col_path及びtidに基づいたキーによってBIから取り出すことができる。
(col_path, tid) -> val
1: { "text": "Tweet this", "user": { "id": 29471497,
"screen_name": "Mashah08" } }
2: { "text": "Tweet that", "user": { "id": 27438992,
"screen_name": "binkert" } }
下記のキーと値のペアがBIに追加される。
(root.text<str>, 1) --> "Tweet this"
(root.text<str>, 2) --> "Tweet that"
(root.user.id<num>, 1) --> 29471497
(root.user.id<num>, 2) --> 27438992
(root.user.screen_name<str>, 1) -> "Mashah08"
(root.user.screen_name<str>, 2) -> "binkert"
配列についての正規化テーブルからフィールドがBIに追加できるが、配列インデックスは、対応する値からとなる。代わりに、配列フィールドは、インデックス情報を保持する個別のArrayindex(AI)に追加することができ、同じ配列内のエントリが、インデックスストアによって併置されることを可能にし、それによって、多くのクエリに良好な性能を提供する。配列値は、下記の署名を用いてAIに記憶することができる。
(col_path, tid, join_key, index) -> val
1: { "id": 3465345, "tags": [ "muffins" "cupcakes" ] }
2: { "id": 3465376, "tags": [ "curry" "sauces" ] }
これらに関して、タグテーブルは、下記のスキーマを有する。
Root.tags<arr>(id_jk: join_key, index: int, val: string)
このテーブルについて、AI内のエントリは下記のようになる。
(root.tags<arr>, 1, 1, 0) --> "muffins"
(root.tags<arr>, 1, 1, 1) --> "cupcakes"
(root.tags<arr>, 2, 2, 0) --> "curry"
(root.tags<arr>, 2, 2, 1) --> "sauces"
ルートオブジェクト内の配列(トップレベルの配列)については、tid及びjoin_keyフィールドは冗長であり(上記を参照)、最適化により除去できることに留意する。しかしながら、ネストされた配列については、別個のjoin_keyが必要であり、余分ではない。例えば、下記のJSONオブジェクトを考える。
1: {"id": 3598574, "tags": [[8,25,75], ["muffins", "donuts",
"pastries"〕〕}
対応する関係スキーマは、
Root.tags<arr>(id_jk: join_key, index: int, val<arr>: join_key)
Root.tags<arr>.val<arr>(id_jk: join_key, index: int, val<num>:
num, val<str>: str)
である。
AIは、下記のキーと値のペアを使用することを思い起こそう。
col_path, tid, join_key, index -> val
下記のAIエントリが生じる。
tags<arr>.val<arr>, 1, 1, 0 -> 1
tags<arr>.val<arr>, 1, 1, 1 -> 2
(numbers array)
tags<arr>.val<arr>.val<num>, 1, 1, 0 -> 8
tags<arr>.val<arr>.val<num>, 1, 1, 1 -> 25
tags<arr>.val<arr>.val<num>, 1, 1, 2 -> 75
(string array)
tags<arr>.val<arr>.val<str>, 1, 2, 0 -> "muffins"
tags<arr>.val<arr>.val<str>, 1, 2, 1 -> "donuts"
tags<arr>.val<arr>.val<str>, 1, 2, 2 -> "pastries"
上記2つのインデックス(BI及びAI)は、採集されたデータ全てを再構築するには十分であるが、この2つのインデックスが効率的にサポートしないアクセスパターンがある。そのアクセスパターンのために、下記のインデックスを導入する。下記のインデックスは、追加スペースを犠牲にして性能改善のためにオプションで作成することができる。
(col_path, index, tid, join_key) -> val
を有し、この署名によって、配列の特定のインデックス要素を迅速に見付けることが可能になる。例えば、インデックス10(タグ[10])で全てのタグの戻すことは、AI2を用いると、簡単で高速である。
マップインデックスは、その機能及び署名、すなわち、
(col_path, tid, join_key, map_key) -> val
において配列インデックスに類似する。
1: { "url": "noudata.com/blog",
"page_views": { "2012-12-01": 10, "2012-12-02": 12, ...
"2012-12-15": 10 }
2: { "url": "noudata.com/jobs",
"page_views": { "2012-12-01": 2, "2012-12-02": 4, ... "2012-
12-15": 7 }
マップとしてフラグを立てられる場合、page_viewsテーブルについての関係スキーマは、
Root.page_views<map>(id_jk: join_key, key: string, val: num)
where key is the map's key and val is the associated value. For
the above objects, the entries in the MI would be:
(root.page_views<map>, 1, 1, "2012-12-01") --> 10
(root.page_views<map>, 1, 1, "2012-12-02") --> 12
…
(root.page_views<map>, 1, 1, "2012-12-15") --> 10
(root.page_views<map>, 2, 2, "2012-12-01") --> 2
(root.page_views<map>, 2, 2, "2012-12-02") --> 4
…
(root.page_views<map>, 2, 2, "2012-12-05") --> 7
である。
この順序付けは、page_viewsマップ内の値が各ページについて併置されることを可能にする一方、BIでは、値が日付によって併置されることになる。
さらに、補助マップインデックスを実装してよい。補助マップインデックスは、その機能及び署名、すなわち、
(col_path, map_key, tid, join_key) -> val
において配列インデックスに類似する。
これによって、“all the different values coresponding to map key 2012‐12‐05”などの、特定のマップ要素についての効率的な検索が可能になる。AI2とMI2の両方の包括的表現は、以下のように書くことができる。
(col_path, key, tid, join_key) -> val
ここで、キーは、配列のインデックスまたはマップのmap_keyに対応する。
上記インデックスは、特定のフィールドの値をルックアップし、それらの値を反復処理するのに有用であるが、クエリが特定の値または特定の値の範囲だけを探している場合、高速アクセスを可能にしない。例えば、クエリが、“mashah08”によって書かれたツイートのテキストを返すこと求めるとする。そのようなクエリを支援するために、スキーマ内のフィールドの一部または全てについてValueIndexを構築することができる。ValueIndexは、データが採集される際に構築されてもよく、後に非同期的に構築されてもよい。値インデックスのキーは、
(col_path, val)
であり、ここで、valは、ソースデータにおける属性の値である。VIにおいてそのキーに対応する値は、どこでその値についてのフィールドが発生するかに応じて決まる。上記各インデックスについて、その値は下記のように変わる。
BI: (col_path, val) -> tid
AI: (col_path, val) -> tid, join_key, index
MI: (col_path, val) -> tid, join_key, key
1: { "text": "Tweet this", "user": { "id": 29471497,
"screen_name": "mashah08" } }
2: { "text": "Tweet that", "user": { "id": 27438992,
"screen_name": "binkert" } }
は、
(root.text<string>, "Tweet this") --> 1
(root.text<string>, "Tweet that") --> 2
(root.user.id<num>, 29471497) --> 1
(root.user.id<num>, 27438992) --> 2
(root.user.screen_name<string>, "Mashah08") --> 1
(root.user.screen_name<string>, "binkert") --> 2
として記憶される。
VIを用いると、キー:(root.user.screen_name,“mashah08”)を探し、全ての関連tidを取り出すことにより、“mashah08”によって書かれた全てのツイートについて検索することができる。そして、各ツイートの対応するテキストを返すために、取り出したtidを使用してBIを検索することができる。インデックス、特に、値インデックスによって犠牲になるのは、追加のストレージスペースであり、新しいオブジェクトとしてインデックスの更新に必要な実行時間がシステムに追加される。スペースまたは更新オーバーヘッドが原因で、ユーザは、全ての可能な経路にインデックスを付けることを望まない場合がある。従って、ユーザは、VIにおいてどの経路にインデックスを付けるかを指定することができる。
(従来のローベースのストアにおけるレコードの要求に類似して)採集したオブジェクト全体の再作成を容易にするために、RowIndex(RI)を実装することができる。RowIndexは、キーと値のペア、
tid --> JSON object
として記憶される。
1 --> { "text": "Tweet this", "user": { "id": 29471497,
"screen_name": "mashah08" } }
2 --> { "text": "Tweet that", "user": { "id": 27438992,
"screen_name": "binkert" } }
である。
BI、AI、MI、VIに関する実施例。上記に類似したツイートを考える。ここで、ツイートが一日に何回リツイートされたかを追跡する“retweet_freq”属性が追加される。
1: { "text": "Love #muffins and #cupcakes: bit.ly/955Ffo",
"user": { "id": 29471497, "screen_name": "mashah08" },
"tags": [ "muffins", "cupcakes" ],
"retweet_freq": { "2012-12-01": 10, "2012-12-02": 13,
"2012-12-03": 1 } }
2: { "text": "Love #sushi and #umami: bit.ly/955Ffo",
"user": { "id": 28492838, "screen_name": "binkert" },
"tags": [ "sushi", "umami" ],
"retweet_freq": { "2012-12-04": 20, "2012-12-05": 1 } }
O{ "text": string, "user": 0{ "id": number,
"screen_name": string }, "tags": [ string ],
"retweet_freq": M{ "2012-12-01": number ... "2012-12-05":
number } }
である。
{
"type": "object",
"obj_type": "object",
"properties" : {
"text" : {
"type": "string"
},
"user": {
"type": "object",
"obj_type": "object",
"properties": {
"id": {
"type": "number",
}
"screen_name": {
"type": "string",
}
}
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"retweet_freq" : {
"type": "object",
"obj_type": "map",
"properties": {
"2012-12-01": {
"type": "number"
},
…
"2012-12-05": {
"type": "number"
}
}
}
}
}
となる。
Root (text: str,
user.id: num, user.screen_name: str,
tags<arr>: join_key,
retweet_freq.2012-12-01: num,
retweet_freq.2012-12-02: num,
retweet_freq.2012-12-03: num,
retweet_freq.2012-12-04: num,
retweet_freq.2012-12-05: num)
Root.tags<arr> (id_jk: join_key,
index: int,
val: str)
である。
Root:
("Love #muffins ...", 29471497, mashah08, 1, 10, 13, 1, NULL,
NULL)
("Love #sushi ...", 28492838, binkert, 2, NULL, NULL, NULL,
20, 1)
Root.tags<arr>:
(1, 0, "muffins")
(1, 1, "cupcakes")
(2, 0, "sushi")
(2, 1, "umami")
Root (text: str,
user.id: num, user.screen_name: str,
tags<arr>: join_key,
retweet_freq<map>: join_key)
Root.tags<arr> (id_jk: join_key,
index: int,
val: str)
Root.retweet_freq<map> (id_jk: join_key,
key: str,
val: num)
Root:
("Love #muffins ...", 29471497, mashah08, 1, 1)
("Love #sushi ...", 28492838, binkert, 2, 2)
Root.tags<arr>:
(1, 0, "muffins")
(1, 1, "cupcakes")
(2, 0, "sushi")
(2, 1, "umami")
Root.retweet_freq<map>:
(1, "2012-12-01", 10)
(1, "2012-12-02", 13)
(1, "2012-12-03", 1)
(2, "2012-12-04", 20)
(2, "2012-12-05", 1)
である。
(root.retweet_freq.2012-12-01, 1) --> 10
(root.retweet_freq.2012-12-02, 1) --> 13
(root.retweet_freq.2012-12-03, 1) --> 1
(root.retweet_freq.2012-12-04, 2) --> 20
(root.retweet_freq.2012-12-05, 2) --> 1
(root.text, 1) --> "Love #muffins and #cupcakes"
(root.text, 2) --> "Love #sushi and #umami"
(root.uer.id, 1) --> 29471497
(root.user.id, 2) --> 28492838
(root.user.screenname, 1) --> mashah08
(root.user.screen_name, 2) --> binkert
である。
(root.tags<arr>, 1, 1, 0) --> "muffins"
(root.tags<arr>, 1, 1, 1) --> "cupcakes"
(root.tags<arr>, 2, 2, 0) --> "sushi"
(root.tags<arr>, 2, 2, 1) --> "umami"
1--> { "text": "Love #muffins and #cupcakes: bit.ly/955Ffo",
"user": { "id": 29471497, "screen_name": "mashah08" },
"tags": [ "muffins", "cupcakes" ], "retweet_freq": { "2012-
12-01": 10, "2012-12-02": 13, "2012-12-03": 1 } }
2--> { "text": "Love #sushi and #umami: bit.ly/955Ffo", "user":
{ "id": 28492838, "screen_name": "binkert" }, "tags": [
"sushi", "umami" 〕, "retweet_freq": { "2012-12-04": 20,
"2012-12-05": 1 } }
(root.retweet_freq<map>, 1, 1, "2012-12-01") --> 10
(root.retweet_freq<map>, 1, 1, "2012-12-02") --> 13
(root.retweet_freq<map>, 1, 1, "2012-12-03") --> 1
(root.retweet_freq<map>, 2, 2, "2012-12-04") --> 20
(root.retweet_freq<map>, 2, 2, "2012-12-05") --> 1
root. retweet_freq<map>, 1) - -> 2, 2, "2012-12-05
root. retweet_freq<map>, 1) - -> 1, 1, "2012-12-03
root. retweet_freq<map>, 10) - -> 1, 1, "2012-12-01
root. retweet_freq<map>, 13) - -> 1, 1, "2012-12-02
root. retweet_freq<map>, 20) - -> 2, 2, "2012-12-04
root. tags<arr>, "cupcakes") - -> 1, 1, 1
root. tags<arr>, "muffins ") - -> 1, 1, 0
root. tags<arr>, "sushi") - -> 2, 2, 0
root. tags<arr>, "umami") - -> 2, 2, 1
(root.text<str>, "Love #muffins and #cupcakes")- -> 1
(root.text<str>, "Love #sushi and #umami") - -> 2
(root.user.id, 29471497) - -> 1
(root.user.id, 28492838) - -> 2
(root.user.screen_name, "mashah08") - -> 1
(root.user.screen_name, "binkert") - -> 2
分析プラットフォームは、サービス指向であるように設計される。様々な実装において、5つの主なサービス、すなわち、プロキシ、メタデータサービス、クエリエクゼキュータ、ストレージサービス、及び、採集サービスがある。
採集サービスは、半構造データをクエリできるストレージサービスに半構造データをロードすることを担当する。ユーザは、様々なプラットフォーム(例えば、MongoDB、Amazon S3、HDFS)から様々なフォーマット(例えば、JSON、BSON、CSV)でデータを供給する。オプションとしてデータは圧縮機構(例えば、GZIP、BZIP2、Snappy)を用いて圧縮される。基本手順は、使用されるフォーマットに関わらず、適用できる。
初期採集プロセスは、幾つかのステップに分けることができる。最初に、入力データをチャンクにパーティション化する。ユーザは、ファイルのコレクションとして、あるいは、データソースに直接接続することによって初期データを供給する。これらのファイルの位置やフォーマットは、メタデータサービス内に記録される。ユーザは、例えばログファイルローテーションのせいで既にパーティション化されデータを供給してよいが、そうではない場合、ファイルは、並列ロードをサポートするためにチャンクにパーティション化することができる。これらのチャンクは、典型的には約数百メガバイトであり、独立して処理される。
{ id: 3546732984 }
{ id: "3487234234" }
{ id: 73242342343 }
{ id: 458527434332 }
{ id: "2342342343" }
は、スキーマ{id:int,id:string}を生成し、id:intには、3のカウントを付記し、id:stringには、2のカウントを付記することができる。各採集マシンは、自身が計算したスキーマ及び統計をメタデータサービスに記憶する。
自身のデータの大半を前もってロードする一部のユーザもいるが、大抵のユーザは、時間をかけて新しいデータを周期的に、多くの場合、定期的(例えば、毎時または毎日)プロセスの一部として、ロードする。このデータの採集は、初期採集に概ね類似する。新しいデータは、チャンクに分割され、スキーマはチャンク毎に計算され、ローカルスキーマは、メタデータサービス内に維持されたグローバルスキーマとマージされる。
データ採集と増分更新を行うための、ここに記載のシステムは、ソースから全データを採集することができる一方、採集したいデータのJSONスキーマ(または関係スキーマ)を前もって指定することによって、比較的簡単にサブセットだけを採集することができる。これは、JSONスキーマ自体の提供、あるいは、サブセットを指定するクエリの提供によって行われる。このように、分析プラットフォームは、ソースデータを具体化したビューとして考えることができる。
初期採集中にロードプロセスを再起動することが可能である一方、増分採集プロセスは、ユーザが全データをゼロからリロードする必要がないように、システムの既存データを破損してはいけない。ファイル採集は冪等演算ではないので、id生成に起因して、基礎的ストレージシステムのスナップショットを撮ることに基づいて簡単な耐障害性スキームを実装することができる。
クエリ例
実行例を示すために、簡単なクエリ
select count(*) from table as t where t.a > 10;
を考える。
最初に、プロキシは、クエリを受信し、計画立案のためにそれをエクゼキュータノードに発行する。次に、エクゼキュータノードは、どのコレクション及びストレージノードが使用可能であるかを決定するためにメタデータサービスを呼び出すクエリ計画を生成する。エクゼキュータノードは、典型的には、その計画を他のエクゼキュータノードに分散させるが、ここでは、単一のエクゼキュータノードだけを必要とする。
データベースシステム(例えば、PostgreSQL)のストレージエンジンは、強く型付けされる。それは、カラム(または属性)の値の全てが、全く同じ型(例えば、整数、文字列、タイムスタンプ等)を有する必要があることを意味する。ビッグデータ分析の文脈において、これは、かなりの制約である。なぜなら、かなり多くのアプリケーションが個々の情報(属性)の表現を変える必要があり、その結果として、アプリケーションがその情報の記憶に使用するデータ型の変更が必要となるからである。例えば、アプリケーションは、最初に、整数を使用して、ある属性の値を記憶し、その後、浮動小数の使用に切り替える場合がある。データベースシステムは、そのような操作をサポートするように設計されていない。
select user.lang from tweets where user.id = '31432'
を考える。
“user.id<int>”及び“user.id<string>”の両方を有する場合、システムは、オプションとして、クエリ時に、整数(例えば、31432)を単一文字列表現(例えば、“31432”)に変換して、ユーザが、ANSI SQL型VARCHARで単一カラム“user.id”を処理することを可能にする。
図1Aは、分析プラットフォームのクラウドベースの実装例を示す。分析フレームワークを使用する組織のローカルエリアネットワーク(LAN)またはワイドエリアネットワーク(WAN)100が、インターネット104に接続する。この実装における計算ニーズ及びストレージニーズは、いずれも、クラウドベースのサービスによって提供される。図に示す特定の実装では、計算サーバは、ストレージサーバとは別個である。詳細には、計算クラウド108は、分析フレームワークに処理能力を与える複数のサーバ112を含む。サーバ112は、個別のハードウェアインスタンスであってもよいし、あるいは、仮想サーバであってもよい。
ストレージ配列120及びストレージ配列124は、同じストレージクラウド116内に示されているが、外部にホストされたプライベートクラウド、パブリッククラウド、及び、組織に固有の内部にホストされた仮想環境を含む、別々のクラウド内に配置されてよい。
図1Cは、本開示の原理によるデプロイメントアプローチ例を示す。採集したデータは、インデックスストレージ120内に加えて、または、その代わりに、データウェアハウス192に記憶することができる。様々な実装において、データウェアハウス192は、カスタマーサイトに配置してもよく、あるいは、図1Cに示すように、クラウド196に配置してもよい。
図2Aにおいて、プロセス図は、ユーザ130がデータにクエリできるように当該データがどのように分析フレームワークに採集されるかの一実施例を示している。データソース300は、分析フレームワークが処理するデータを提供する。生データが自己記述的でない場合、オプションであるユーザ定義のラッパー関数304によって、その生データをJSONオブジェクト等の自己記述的な半構造データに変換してよい。
図3は、データ採集プロセスの例を示す。制御は504で始まり、ここで、ユーザまたはアドミニストレータなどによって、データソースを指定することができる。さらに、データソースから一定のデータセットを選択してよく、一定のサブセッティング操作及び低減操作をデータソースに要求してよい。制御は508に続き、ここで、指定されたデータソースは、新しいデータを求めて監視される。
図13Aにおいて、グラフィカルユーザインタフェースは、左側のウィンドウ枠に推論したスキーマを表示し、右側のウィンドウ枠に、クエリとクエリ結果を示す。これらの例においては、ツイッター属性の表現の例を提示している。
上記に、スキーマ推論を紹介した。スキーマ推論は、半構造オブジェクト(一定の実装においては、JSONドキュメント)のコレクションから累積(または、グローバル)スキーマ(一定の実装においては、JSONスキーマとも呼ばれる)を抽出する。この累積スキーマは、さらなる入力が入手されると、増分的に更新される。累積スキーマは、マップまたは配列に属するエンティティのセットを指定するように装飾されてよい。このような累積スキーマの作成、及び、累積スキーマに基づいたデータの処理は、従来の抽出、変換、ロード、(ETL)プロセスの一部として、または、そのプロセスに替えて有利に使用することができる。結果として生じるETLプロセスは、スピード、忠実度、ユーザビリティのうちの1つまたは複数において改善が見られる。
データソース
オブジェクトソース
入力ソースの定義をETLプロセスに広げてオブジェクトソースを取り扱う。これらのソースは、NoSQLストア、MongoDBやCouchbase等のドキュメントストア、Redis等のデータ構造ストア、Cassandra、HBase、DynamoDB等のキー/多値ストアを含むことができる。ファイルストアのファイル内に記憶されたオブジェクトは、追加のオブジェクトソースとして扱うことができる。ファイルに記憶されたオブジェクトは、JSON、BSON、Protobuf、Avro、Thrift及びXMLを含むことができる。
データベース等の関係ソースもソースとして用いてよい。関係ソースからデータを抽出するプロセスは、ある意味では、JSONスキーマから関係スキーマを生成するプロセスを逆に実行すると考えることができる。プロセスは、各ローをオブジェクトに変換するルートテーブルを識別することで始まる。ルートテーブルは、ユーザが指定してもよく、データコレクタプロセスによって自動的に選択されてもよく、以前のヒューリスティックス、または、ユーザもしくはアドミニストレータが提供した規則セットに基づいて、データコレクタプロセスによって選択されてもよい。データコレクタは、ユーザが後に手動で変更を行うことを前提として、ルートテーブルを選択してよい。
Table: user
Userid, name, age
1, "Nate", 27
2, "Stavros", 87
Table: address
Userid, start, end, city
1, 1995, 2006, Ann Arbor
1, 2006, NULL, Redwood City
2, 2005, 2007, Cambridge
2, 2007, NULL, San Francisco
user : { "userid" : "integer",
"name" : "string",
"age" : "integer",
"address" : [ {
"start" : "integer",
"end" : "integer",
"city" : "string" } 〕
}
{ "userid" : 1, "name" : "Nate", "age" : 27,
"address" : [ { "start" : 1995, "end" : 2006",
"city" : "Ann Arbor" },
{ "start" : 2006, "end" : null,
"city" : "Redwood City" } 〕 }
{ "userid" : 2, "name" : "Stavros", "age" : 87,
"address" : [ { "start" : 2005, "end" : 2007",
"city" : "Cambridge" },
{ "start" : 2007, "end" : null,
"city" : "San Francisco" } 〕 }
一部のケースでは、関係ソースは、単一のルートテーブルに関連付けられていない複数のテーブルを含み得る、または、異なるテーブルの結合方法は、自明でない場合がある。各テーブル(または、テーブルのセット)がタイムスタンプデータを有する少なくとも1つのカラムを含む状況では、コレクタプロセスは、テーブルのセットを次のように、「イベントにする」ことができる(「イベント化」と称する)。カラムとして入力テーブルからの全てのカラムの統合(複数のテーブルに現れる同じカラム名は、新しいテーブルでは、その名前を有する単一のカラムになり得る)と、”event”と”time”という少なくとも2つのカラムと、を有する新たな論理的または物理的なイベントテーブルを作成する。これらの名前は、既存のテーブルのカラム名との競合を避けるために、イベント化時に、プログラム的に(所定の接頭辞及び/または接尾辞を有するなど)変更することができる。
table:user_log {"id": "number", "session_start" :
"timestamp", "session_end" : "timestamp"}
table:query_log {"id": "number", "query_text" : "string",
"query_start" : "timestamp", "duration" : "number"}
table:cpu_load {"time":"timestamp", "load" : "float"}
table:events { "event" : "string",
"_time" : "timestamp",
"_time2" : "timestamp",
"id": "number",
"session_start" : "timestamp",
"session_end" : "timestamp",
"query_text" : "string",
"query_start" : "timestamp",
"duration" : "number",
"time" : "timestamp",
"load" : "float" }
user_log : (15213, "01/01/2014 12:15:00",
"01/01/2014 12:15:30")
query_log : (79004525, "select * from T;",
"01/01/2014 10:10:00", 53)
cpu_load : ("01/01/2014 11:20:30", 74.5)
("user_log", "01/01/2014 12:15:00", "01/01/2014 12:15:30",
15213, "01/01/2014 12:15:00", "01/01/2014 12:15:30",
NULL, NULL, NULL, NULL, NULL),
("query_log", "01/01/2014 10:10:00", NULL, 79004525, NULL,
NULL, "select * from T;", "01/01/2014 10:10:00", 53,
NULL, NULL),
("cpu_load", "01/01/2014 11:20:30", NULL, NULL, NULL, NULL,
NULL, NULL, NULL, "01/01/2014 11:20:30", 74.5)
コレクタは、上記データソースの1つまたは複数から個々のレコードを抽出するのに使用可能なソフトウェア構成要素である。標準フォーマット(圧縮可能であってよい、または圧縮不能であってよい、JSON、BSON等)の受信ファイルの処理について前述したが、他の機構を用いて、新しいデータを求めてデータソースを監視し、このデータを採集プロセスに送るために抽出することができる。
データが、ファイルシステムにおいて1つまたは複数のディレクトリで提供される場合、コレクタプロセスは、変更を探してファイルシステムを定期的に監視することができる。ファイルシステムは、従来のローカルファイルシステム(例えば、ext4)であってもよく、ファイルシステムのようなインタフェースを有する分散ストア(例えば、HDFS、AmazonS3)であってもよい。ファイルシステムの正確なインタフェースに応じて、コレクタは、ファイルシステムを定期的にスキャンして、既存のファイルのリストと比べることによって、または、インタフェースに組み込まれた通知機構(例えば、S3バケットロギング)を用いることによって、新たなファイルを検出することができる。
ソースデータが、関係データベース(例えば、MySQL、PostgreSQL、Oracle等)またはNoSQLストア(例えば、MongoDB、CouchDB等)など、ファイルシステム以外の既存のデータストアに記憶されている場合、コレクタは、内蔵スナップショット機構を利用することができる。大抵のデータストアは、データを、ファイルシステムまたは他のプロセスにエクスポートする機構をサポートしている。例えば、PostgreSQLは、SQL COPYコマンドをサポートしており、pg_dumpという名の外部ユーティリティを利用可能である。この機構を用いると、新たなレコードを採集するために、ソースデータのダンプを定期的に行うことができる。スナップショットは、リモートプロシージャコールを介してコレクタによって、または、ユーザによって開始することができる。全てそろったスナップショットを撮ると、個々のレコードは、複数のスナップショットに現れ得る。このような重複レコードは、ソース固有の主キーを用いるなどして、または、全てそろったレコードが別々であることが確かな場合、比較の目的で、そのレコード全体に対してハッシュ関数を用いることによって、識別、無視してよい、
複製ログ
データ抽出
スキーマ推論ステップは、ソースデータを全て処理することが必要なので、データをさらにパスすることなく、このプロセス中、統計を計算することができる。統計は、ETLの忠実度の強化を含む、多くの利益を提供し得る。
スキーマ属性に関する統計
{"id": 12345678, "location": "Saratoga, CA", "tags":
["urgent", "direct"]}
{"id": "12345678", "location": "San Francisco, CA", "source"
"iPhone"}
{
"id" : "string",
"id" : "number",
"location" : "string",
"source" : "string",
"tags" : ["string"]
}
{
"type": "object",
"count" : 2,
"properties" : {
"id" : {
"type" : [
{"type": "string", "count": 1},
{"type": "int32", "count": 1},
〕
}"
location" : {
"type": "string",
"count": 2
},
"source" : {
"type": "string"
"count": 1
},
"tags" : {
"type": "array"
"count": 1
"items" : {
"type": "string",
"count": 2
}
}
}
}
例えば、各キーが現れる頻度など、ソースデータのスキーマに関する統計の収集に加えて、特定の属性に関連付けられた値の統計をとることができる。これらの統計は、クエリ最適化、データ発見、及び、異常検出を含む、様々なアプリケーションに用いることができる。関心のある統計は、属性の型に応じて決まる。数値属性については、これらのメトリクスは、最低値及び最大値などの基本的な統計的尺度と、分散の平均や標準偏差と、を含んでよい。並列処理を可能にするために、統計は、可換的かつ結合的な操作を用いて収集することができるように、選択してよい。
一部の統計は、単一の属性または値ではなく、複数の属性に基づいている。よくある例の1つは、どのカラムが頻繁に一緒に発生するかを識別することである。例えば、ログデータに基づいたソースは、同じストリームの別々の型のレコードを組み合わせてよい。下記のJSONレコードが一実施例である。
{"user": "mashah", "err_num": 4,
"err_msg": "Connection error."}
{"user": "lstavrachi", "session_time": 23,
"OS": "Mac OS X"}
{"user": "mashah", "session_time": 17,
"OS": "Windows 7"}
{"operation": "update", "duration": 10,
"frequency": 3600}
("user", "err_num", "err_msg")
("user", "session_time", "OS")
("operation", "duration", "frequency")
("user", "err_num", "err_msg", "session_time", "OS")
("operation", "duration", "frequency")
上記統計は、一般的に並列で計算することができる一方、一部の統計は、一旦、全てのデータを準備しなければ、計算するのは難しい(例えば、メジアンやモード)。これらの統計は、インデックスストアのクエリ機能を用いてデータのロード完了した後、計算してよい。これには、大量のデータのスキャンが必要になり得るので、インデックスストアがアイドル状態のときに、非同期で行ってよい。
レコードにとって有益であり得る統計の別のクラスは、エラー統計である。採集中、データ自体またはシステム操作で遭遇し得る多くの異なる種類のエラーがある。例えば、これらは、入力データ解凍に関するエラー、入力ファイルフォーマットのエラー、特定のレコードの構文解析エラー、文字列符号化のエラー(例えば、UTF−8)、ロックされたファイルを開こうとしてのエラー、及び、ネットワークを介したソースデータへのアクセスのエラーを含んでよい。これらの統計に関する情報は、メタデータストアに保持することができ、必要に応じて、ユーザ及び/またはアドミニストレータに送ることができる。
採集したデータは、記憶及びクエリを容易にする、上記のBigIndex(BI)、ArrayIndex(AI)及びRowIndex(RI)を含み得るインデックスのコレクションに記憶することができる。インデックスストアに、ユーザは直接クエリを行うことができるが、インデックスストアは、別のシステムをロードするプロセス中に、中間ストアとして用いることもできる。この欄は、ETLプロセスのための中間ストアとしてのインデックスストアの使用を記述する。
インデックスストアをETLの中間ストレージ領域として用いる際、インデックスストアからのバルクデータの効率の良いエクスポートが重要である。例えば、ハードディスクドライブ(特に、磁気ドライブ)を用いるとき、データの大きいチャンクを連続して読み取ることによって、シーク待ち時間を避けて、最大帯域幅を達成するのが、より効率的である。
N = ( f / (1-f) ) * L * B
N = (.9 / (1 - .9)) * 10 ms/seek * 100 MB/s
N = 9 MB/seek
create a cache for each column,
this cache caches data for a tid with a
replacement policy geared towards streaming
and implements prefetching.
for tid in output_touple_ids:
start building new touple
for each column of this touple:
lookup tid in cache
if tid present
evict tid to optimize for streaming
check for free space in this cache,
if ample free space,
prefetch the next block
if tid not present,
fetch the block of data containing the tid from
the AI,
if necessary,
decompress chunk containing datum
add datum to touple
add touple to output buffer
if output buffer is full,
send output to destination
インデックスストアは、スナップショット、回復、サイズ変更、及び、移行など、様々な管理機能をサポートするように構成されてよい。これらの機能は、インデックスストアの書き込みと、Linux(登録商標)論理ボリュームマネージャ(LVM)等の基礎的システム技術の利用との、適切なオーケストレーションによって、実装することができる。
系列
1つのデータストアから別のデータストアにデータを移す時、システムを通って移動する各データの系列を追跡可能であるのが望ましい。実施例として、各レコードが復帰改行で分けられたJSONレコードを含むファイルのコレクションを考える。これらのファイルからのデータは、インデックスストアにロードしてよく、インデックスストアからデータウェアハウスにロードされてよい。レコードの系列を維持するために、各レコードは、例えば、各レコードのソースファイル名と行番号を記録することによって、追跡することができる。系列情報は、追加のカラム(またはカラムのセット)として、インデックスストアに記憶することができる。
時間は、多くのシステムにおいて基本的変数である。一部の分析は、時間フィールドの意味を理解するシステムによって、改善される、または、可能になる。オブジェクトの複数のバージョンを保持し、時間を使って、それらのバージョンを区別するデータベースは、テンポラル(時間)データベースと呼ばれることが多い。オブジェクトに適用する時間には複数の概念がある。時間についての2つ一般的概念は、トランザクション時間(TT)と有効時間(VT)である。トランザクション時間は、システムがトランザクションを行った時間である。有効時間は、1つのデータが有効である時点または、時間範囲である。例えば、ある人が住んでいる特定の住所は、その人がそこに住んでいる特定の期間(VT)に関連する。住所がシステムに記録された時は、TTである。
上記のインデックスストアは、様々な実装において、バルク挿入またはバルク追加を効率よく処理する。これは、ハードディスクドライブを有するシステム上での、クエリ及び抽出に効果がある。更新及び削除(既存のタプルが何らかの方法で変更されるとき、更新が起こる)を効率よく処理するためには、インデックスストアへの何らかの変更が必要となり得る。これらの更新は、MongoDB及びそのoplog等の何らかの種類のトランザクションストアが行った変更の順序付リストとして、到着してよい。
中間ストアが存在する場合、中間ストアからデータをエクスポートするときに、変換を行うことができる。これによって、異なる宛先に対して異なる変換が可能になり、また、変換を行う前に、良く定義された単一のソースデータ表現の作成をサポートし得る。中間ストアを使用しない場合、各カラムを関係に変換する時に、変換を行ってよい。
1つのよくある変換は、値を1つの型から別の型に変換することである。例えば、JSONは、データ型を定義しないので、文字列(例えば、ISO 8601に従って)または数値(例えば、UNIX(登録商標)エポックからの秒で)として、日付を記憶するのが一般的である。宛先が、データ型をサポートしている(大抵の関係データベースはサポートしている)場合、型変換ディレクティブを追加して、値を日付に変換することができる。同様のディレクティブを用いて、適切な文字列を数字に型変換することができる。これらの型変換ディレクティブは、データの予備知識を用いて手動で指定することもでき、スキーマ推論中に収集された統計を用いて自動で推論することもできる。
様々な他のデータクリーニング操作を、エクスポート中に行うことができる。例えば、ある属性があるドメインにあることが分かっている場合(例えば、州コードを表す文字列または郵便番号を表す数字)、値は、省略できるまたは、デフォルトに変換できる。
上記のように、システムは、配列及びマップからのデータを別々のテーブルに分割してよいが、一部のケースでは、ユーザは、関係スキーマに対して追加の制御を望む場合がある。例えば、ユーザは、組み合わせて同じ宛先にしたい複数のソース、または、その逆、を有する場合がある。テーブルを組み合わせるために、ユーザは、結合キーを指定してよく、結合は、エクスポートの前にインデックスストアで行うことができる。
データウェアハウス
ETLプロセスの1つの可能な出力先(または、ターゲット)は、データウェアハウスである。データウェアハウスは、ローフォーマット(例えば、CSV)で出力ファイルのセットを作成することによって、動的スキーマの変更に従ってデータウェアハウスを適合させるための対応する一連のALTER TABLE/COLUMNコマンドと共にロードされてよい。
ユーザは、関係ストアの代わりに、オブジェクトストアのロードを選んでよい。データをオブジェクトストアにロードする1つの方法は、求められる出力フォーマットに従って、累積的JSONスキーマを用いて、オブジェクトをシリアライズすることである。
ETLプロセスの個々の構成要素は、分散コンピュータ環境内、すなわち、クラウドで、または、プライベートデータセンター内で、スケジュール、及び、実行することができる。スケジューリングは、データソース及び宛先の性質、インデックスストアが用いられているか否か、並びに、求められる並列処理の程度に応じて決まってよい。パイプラインの各段階の状態は、回復、統計、及び、系列をサポートするためにメタデータサービスに記憶されてよい。
old_metadata = None
while True:
metadata = source.get_metadata()
if old_metadata == metadata:
# nothing new here
sleep if necessary to prevent overwhelming source
continue
# find new stuff
new_stuff = metadata - old_metadata
# build chunks of appropriate size
chunk = new Chunk()
for item in new_stuff:
chunk.add_data(item)
if chunk.big_enough():
mds.record_chunk(chunk)
chunk = new Chunk()
while True:
# Get any unprocessed chunk of source data
chunk = mds.get_any_unprocessed_chunk()
# code below can be in an asynchronous task
cumulative = new Schema()
for record in chunk.read():
schema = get_schema(record)
cumulative.update(schema)
iss.write(record)
iss.commit_chunk()
mds.save_chunk_schema(chunk, cumulative)
parent = None
while True:
# get a few committed chunks such that they form a
# reasonable copy size
chunks = mds.get_committed_chunks()
# generate a cumulative schema across loads
cumulative = Schema()
for chunk in chunks:
cumulative.update(mds.get_schema(chunk))
parent = mds.store_new_cumulative(cumulative, chunks,
parent)
while True:
cumulative, chunks = mds.get_unexpoeted_schema()
# code below can be in an asynchronous task
# export the new chunks according to the
# cumulative schema
intermediate = new Intermediate()
for record in iss.get_chunks(chunks):
export_data = prepare_output(record, cumulative)
intermediate.append(export_data)
mds.record_schema_export(cumulative, intermediate)
while True:
schema, output = mds.get_uncopied_output()
previous = mds.get_parent_schema(schema)
# generate alter table statements
if schema != previous:
difference = schema - previous
warehouse.alter_table(difference)
warehouse.copy_from(output)
cumulative = new Schema()
intermediate = new Intermediate()
while True:
# Get any unprocessed chunk of source data
chunk = mds.get_any_unprocessed_chunk()
# code below can be in an asynchronous task
for record in chunk.read():
schema = get_schema(record)
if schema != cumulative:
mds.record_schema_export(cumulative,
intermediate)
cumulative.update(schema)
intermediate = new Intermediate()
intermediate.append(record)
iss.write(record)
mds.save_chunk_schema(chunk, cumulative)
インデックスストアを用いるとき、採集タスク(SIL)及びエクスポートタスク(E)は、計算集約的であってよい。これらのタスクは、内部で並列化することができる。さらに、これらのタスクは、その依存関係が満たされれば、ジョブスケジューリングシステム(例えば、PBS、LSF、YARN、MESOS等)を介して非同期的に発行することもできる。これらのジョブスケジューリングシステムの多くは、ステップ間の依存関係も符号化することができる。(図16Aに示すような)依存グラフを知ることによって、スケジューリングモジュールは、全てのノードが使用中であるが、同時に、未処理の(outstanding)ジョブがあまり多くないことを保証しているグラフで、古いジョブを発行することができる。
エラー回復の目的で、サブプロセスの一部または全ては、システムの状態に関するメタデータと、サブプロセスがシステムに行おうとする変化とを、記録する。ステップが失敗した場合、回復コードは、このメタデータを用いて、中断された操作を終えるか、再試行できるように不完全な操作を取り消すことができる。例えば、ロードサブプロセスは、ロード中のタプルIDのセットを記録する。ロードサブプロセスが失敗すると、そのセットに一致するタプルIDを有する全てのレコードをパージするにように指示するコマンドが、インデックスストアに発行されてよい。そうすると、ロードは再試行できる。
一部の関係ストアは、中間ファイルなしにデータを直接ロードする機構を有している。例えば、Postgresは、COPY FROM STDINコマンドをサポートしており、データを直接データベースに供給することができる。エクスポートプロセスは、このインタフェースを用いて、データを直接、出力システムに書き込むことができるので、エクスポート(E)ステップとコピー(C)ステップをマージすることができる。AmazonのRedshift等、一部のシステムは、リモートプロシージャコールを介して、ウェアハウスから直接、データをインデックスストアに引き出してくる機構を有する。この場合、ユーザは、マニフェストァイルを作成し、コピーするために発行するセキュアシェル(ssh)コマンドのセットをリストにする。各sshコマンドは、ホストと、そのホスト上で実行するコマンドと、を指定する。タプルIDのセットをインデックスストアから抽出するコマンドを指定することによって、宛先データベースは、エクスポートのために必要なレコード/オブジェクトを、インデックスストアから引き出すことができる。
リソース監視
監視システムは、システムが使用するハードウェアリソースとソフトウェアリソースを追跡する。それらリソースは、コレクタ、採集パイプライン、メタデータストア、(オプションの)インデックスストア、及び、データウェアハウスが使用する計算リソース及びストレージリソースを含んでよい。監視システムは、CPU、メモリ、ディスクの使用率などを含むが、それらに限られないメトリクスと、ネットワーク要求への応答と、を追跡する。
基本的なリソース監視に加えて、追加の監視を、特に、採集パイプラインに対して行うことができる。採集プロセスの各段階(スキーマ推論、インデックスストアのロード、スキーマ計算など)に関するメタデータを、採集中にセントラルメタデータストアに記憶することができ、そのメタデータを用いてシステムに関するメトリクスをインテロゲートする(問い合わせる)ことができる。最も基本的なレベルでは、この機構を用いて、停止したプロセスまたは正確に機能していないプロセスを識別することができる。
監視システムは、インデックスストアまたはデータウェアハウスに対して行われるクエリの実行時間を監視することができる。類似のクエリの実行時間がどのように変化するかを観察することによって、システムの問題の可能性、及び、ソースデータの特性の変化を、識別することができる。この情報は、データウェアハウスにおけるインデックスの使用、または、インデックスストアにおけるクエリ計画を知らせることができる。例えば、めったにクエリされないカラムは、専用インデックスを有する必要はないかもしれず、クエリ時に、一定の方法でソートされることが多いカラムは、頻繁なクエリに従ってソートされた新しいインデックスを有することによって利益を得てよい。
上記は、事実上単なる例示にすぎず、その開示、用途、または使用に限定することを意図してはいない。開示の広範な教示は、様々な形態で実装することができる。従って、この開示は特定の例を含むが、開示の真の範囲は、それに限定されるべきではない。図面、明細書、及び、特許請求の範囲を検討すると、他の変更形態が明らかになるであろう。本明細書においては、A、B、及び、Cの少なくとも1つという文言は、非排他的論理ORを使用する論理(AまたはBまたはC)を意味すると解釈されるべきである。方法内の1つまたは複数のステップは、本開示の原理を変えること無く、異なる順序で(または同時に)実行されてよいことは理解されたい。
Claims (15)
- 第1のデータソースから取り出したオブジェクトの累積スキーマを動的に作成するように構成されたスキーマ推論モジュールであって、
前記取り出したオブジェクトのそれぞれは、(i)データと、(ii)前記データを記述するメタデータと、を含み、
前記累積スキーマの動的作成は、前記取り出したオブジェクトの各オブジェクトについて、(i)前記オブジェクトからスキーマを推論することと、(ii)前記推論されたスキーマに従って前記オブジェクトを記述するように、前記累積スキーマを選択的に更新することと、を含み、
前記スキーマ推論モジュールは、
前記取り出したオブジェクトのデータ型に関する統計を収集し、
前記データ型に関する統計に基づいて、前記取り出したオブジェクトのデータが正確に型付けされているかどうかを決定する、
ように構成されている、前記スキーマ推論モジュールと、
前記累積スキーマに従って、前記取り出したオブジェクトの前記データをデータ宛先システムに出力するように構成されたエクスポートモジュールと、
を備えるデータ変換システム。 - 前記データ宛先システムは、データウェアハウスを含む、請求項1に記載のデータ変換システム。
- 前記データウェアハウスは、関係データを記憶する、請求項2に記載のデータ変換システム。
- 前記エクスポートモジュールは、前記累積スキーマを関係スキーマに変換し、前記関係スキーマに従って、前記取り出したオブジェクトの前記データを前記データウェアハウスに出力するように構成された、請求項3に記載のデータ変換システム。
- 前記エクスポートモジュールは少なくとも1つの、
前記関係スキーマに行われた変更を反映するよう前記データウェアハウスのスキーマを更新するようにという前記データウェアハウスに対するコマンドを生成すること、
前記関係スキーマに従って、前記取り出したオブジェクトの前記データから少なくとも1つの中間ファイルを作成すること、
を実行するように構成され、
前記少なくとも1つの中間ファイルは、所定のデータウェアハウスフォーマットを有し、
前記エクスポートモジュールは、前記少なくとも1つの中間ファイルを前記データウェアハウスにバルクロードするように構成された、請求項4に記載のデータ変換システム。 - 前記取り出したオブジェクトから前記データをカラム形式で記憶するように構成されたインデックスストアをさらに備える、請求項1〜5のいずれか1項に記載のデータ変換システム。
- 前記エクスポートモジュールは、前記インデックスストアの前記記憶されたデータから、ローベースのデータを生成するように構成された、請求項6に記載のデータ変換システム。
- 前記スキーマ推論モジュールは、時間値を前記取り出したオブジェクトの識別子にマップする時間インデックスを、前記インデックスストアに作成するように構成され、
前記取り出したオブジェクトの各取り出したオブジェクトについて、前記時間値は、(i)前記取り出したオブジェクトの作成に対応するトランザクション時間と、
(ii)前記取り出したオブジェクトに対応する有効時間の少なくとも1つを表す、請求項6または7に記載のデータ変換システム。 - (i)後に前記インデックスストアに記憶するために、追加のオブジェクトをキャッシュし、かつ、(ii)前記キャッシュのサイズが閾値に達したことに応答して前記インデックスストアにバルクロードするために、前記追加のオブジェクトをパッケージ化するように構成される書き込み最適化ストアをさらに備える、請求項6〜8のいずれか1項に記載のデータ変換システム。
- 前記スキーマ推論モジュールは:
前記取り出したオブジェクトの前記メタデータ、または
前記取り出したオブジェクトの前記データ、
の少なくとも1つに関する統計を収集するように構成され、
前記統計は、最低、最大、平均、及び、標準偏差の少なくとも1つを含む、請求項1から9のいずれか1項に記載のデータ変換システム。 - 前記第1のデータソースから関係データを受信し、かつ、前記スキーマ推論モジュールが使用する前記オブジェクトを生成するよう構成されたデータコレクタモジュールをさらに含み、
前記データコレクタモジュールは、(i)前記関係データの各項目を取り出すためのテーブルを示す第1のカラムと、(ii)前記関係データの各項目に関連付けられたタイムスタンプを示す第2のカラムと、を作成することによって、前記関係データをイベント化するように構成された、請求項1〜10のいずれか1項に記載のデータ変換システム。 - 所定の依存情報に従って、前記スキーマ推論モジュールと前記エクスポートモジュールにジョブの処理を割り当てるように構成されたスケジューリングモジュールをさらに備える、請求項1から11のいずれか1項に記載のデータ変換システム。
- 前記エクスポートモジュールは、前記累積スキーマを複数のテーブルにパーティション化するように構成され、前記複数のテーブルの各テーブルは、前記取り出したオブジェクトに一緒に現れるカラムを含み、
前記エクスポートモジュールは、前記取り出したオブジェクトの対応するグループであって、それぞれ、識別子要素について異なる値を有するグループ、にあるカラムに従って、前記累積スキーマをパーティション化するように構成された、請求項1〜12のいずれか1項に記載のデータ変換システム。 - 前記スキーマ推論モジュールは、前記取り出したオブジェクトのそれぞれについて、ソース識別子を記録し、
前記取り出したオブジェクトの各オブジェクトについて、前記ソース識別子は、前記第1のデータソースの固有の識別子と、前記第1のデータソース内の前記オブジェクトの位置と、を含む、請求項1〜13のいずれか1項に記載のデータ変換システム。 - データ分析システム操作方法であって、
オブジェクトをデータソースから取り出すことであって、前記取り出したオブジェクトの各オブジェクトは、(i)データと、(ii)前記データを記述するメタデータと、を含む、前記取り出すことと、
前記取り出したオブジェクトの各オブジェクトについて、
(i)前記オブジェクトの前記メタデータと、前記オブジェクトの前記データの要素の推論されたデータ型とに基づいて、前記オブジェクトからスキーマを推論することであって、前記オブジェクトのうちの少なくとも1つのオブジェクトについて推論されたスキーマは、前記オブジェクトのうちの他のオブジェクトについての他の推論されたスキーマとは異なる、前記推論することと、
(ii)(a)前記推論されたスキーマが記述する前記オブジェクトと、(b)累積スキーマが記述する累積したオブジェクトのセットと、の両方を記述する統合スキーマを作成することと、
(iii)前記統合スキーマを前記累積スキーマとして記憶することと、
前記取り出したオブジェクトのデータ型に関する統計を収集することと、
前記データ型に関する前記統計に基づいて、前記取り出したオブジェクトの前記データが正確に型付けされているかどうかを決定することと、
前記取り出したオブジェクトのそれぞれの前記データをデータウェアハウスにエクスポートすることと、
によって、前記累積スキーマを動的に生成することと、
を含む方法。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201361800432P | 2013-03-15 | 2013-03-15 | |
US61/800,432 | 2013-03-15 | ||
PCT/US2014/029484 WO2014144889A2 (en) | 2013-03-15 | 2014-03-14 | Scalable analysis platform for semi-structured data |
US14/213,941 | 2014-03-14 | ||
US14/213,941 US9613068B2 (en) | 2013-03-15 | 2014-03-14 | Scalable analysis platform for semi-structured data |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2016519810A JP2016519810A (ja) | 2016-07-07 |
JP2016519810A5 JP2016519810A5 (ja) | 2016-08-18 |
JP6416194B2 true JP6416194B2 (ja) | 2018-10-31 |
Family
ID=51532920
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2016503110A Active JP6416194B2 (ja) | 2013-03-15 | 2014-03-14 | 半構造データのためのスケーラブルな分析プラットフォーム |
Country Status (6)
Country | Link |
---|---|
US (3) | US9613068B2 (ja) |
EP (1) | EP2973051A4 (ja) |
JP (1) | JP6416194B2 (ja) |
CN (1) | CN105122243B (ja) |
CA (2) | CA2906816C (ja) |
WO (1) | WO2014144889A2 (ja) |
Families Citing this family (269)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10534606B2 (en) | 2011-12-08 | 2020-01-14 | Oracle International Corporation | Run-length encoding decompression |
CN104160394B (zh) * | 2011-12-23 | 2017-08-15 | 亚马逊科技公司 | 用于半结构化数据的可缩放分析平台 |
US9501550B2 (en) * | 2012-04-18 | 2016-11-22 | Renmin University Of China | OLAP query processing method oriented to database and HADOOP hybrid platform |
US10333820B1 (en) | 2012-10-23 | 2019-06-25 | Quest Software Inc. | System for inferring dependencies among computing systems |
JP6416194B2 (ja) | 2013-03-15 | 2018-10-31 | アマゾン・テクノロジーズ・インコーポレーテッド | 半構造データのためのスケーラブルな分析プラットフォーム |
US9195456B2 (en) * | 2013-04-30 | 2015-11-24 | Hewlett-Packard Development Company, L.P. | Managing a catalog of scripts |
US9305067B2 (en) | 2013-07-19 | 2016-04-05 | International Business Machines Corporation | Creation of change-based data integration jobs |
US10394848B2 (en) * | 2013-07-29 | 2019-08-27 | Amazon Technologies, Inc. | Generating a multi-column index for relational databases by interleaving data bits for selectivity |
US9380019B2 (en) * | 2013-08-26 | 2016-06-28 | Verisign, Inc. | Command performance monitoring |
US9536200B2 (en) * | 2013-08-28 | 2017-01-03 | International Business Machines Corporation | Sentiment analysis of data logs |
US11113054B2 (en) | 2013-09-10 | 2021-09-07 | Oracle International Corporation | Efficient hardware instructions for single instruction multiple data processors: fast fixed-length value compression |
US9471610B1 (en) * | 2013-09-16 | 2016-10-18 | Amazon Technologies, Inc. | Scale-out of data that supports roll back |
US9246688B1 (en) * | 2013-09-25 | 2016-01-26 | Amazon Technologies, Inc. | Dataset licensing |
US9811571B2 (en) * | 2013-12-13 | 2017-11-07 | Sap Se | Bitemporal timeline index |
US20150220584A1 (en) * | 2014-02-03 | 2015-08-06 | Codefutures Corporation | Dynamic modification of a database data structure |
US10037349B2 (en) * | 2014-02-05 | 2018-07-31 | International Business Machines Corporation | Optimization of an in memory data grid (IMDG) schema based upon a No-SQL document model |
JP6273969B2 (ja) * | 2014-03-28 | 2018-02-07 | 富士通株式会社 | データ加工装置、情報処理装置、方法、およびプログラム |
US11005738B1 (en) | 2014-04-09 | 2021-05-11 | Quest Software Inc. | System and method for end-to-end response-time analysis |
US9411611B2 (en) * | 2014-05-02 | 2016-08-09 | International Business Machines Corporation | Colocation and anticolocation in colocation data centers via elastic nets |
US20150331875A1 (en) * | 2014-05-16 | 2015-11-19 | Syntel, Inc. | System and method for validating integrated data recasting objects |
US10705877B2 (en) * | 2014-05-29 | 2020-07-07 | Ab Initio Technology Llc | Workload automation and data lineage analysis |
US20150347477A1 (en) * | 2014-05-30 | 2015-12-03 | John Esmet | Streaming File System |
US10061808B2 (en) * | 2014-06-03 | 2018-08-28 | Sap Se | Cached views |
US10127244B2 (en) * | 2014-06-04 | 2018-11-13 | Harris Corporation | Systems and methods for dynamic data storage |
US10198460B2 (en) * | 2014-06-04 | 2019-02-05 | Waterline Data Science, Inc. | Systems and methods for management of data platforms |
US10262264B2 (en) | 2014-06-09 | 2019-04-16 | Cognitive Scale, Inc. | Method for performing dataset operations within a cognitive environment |
US10325206B2 (en) * | 2014-06-09 | 2019-06-18 | Cognitive Scale, Inc. | Dataset engine for use within a cognitive environment |
WO2016008090A1 (en) * | 2014-07-15 | 2016-01-21 | Microsoft Technology Licensing, Llc | Managing data ingestion |
US10169433B2 (en) * | 2014-07-29 | 2019-01-01 | Microsoft Technology Licensing, Llc | Systems and methods for an SQL-driven distributed operating system |
US10176236B2 (en) | 2014-07-29 | 2019-01-08 | Microsoft Technology Licensing, Llc | Systems and methods for a distributed query execution engine |
US10437843B2 (en) | 2014-07-29 | 2019-10-08 | Microsoft Technology Licensing, Llc | Optimization of database queries via transformations of computation graph |
EP3180768B1 (en) | 2014-08-12 | 2020-04-22 | Eingot LLC | A zero-knowledge environment based social networking engine |
US11474874B2 (en) | 2014-08-14 | 2022-10-18 | Qubole, Inc. | Systems and methods for auto-scaling a big data system |
US10019472B2 (en) * | 2014-08-14 | 2018-07-10 | Intellicus Technologies Pvt. Ltd. | System and method for querying a distributed dwarf cube |
US10877995B2 (en) * | 2014-08-14 | 2020-12-29 | Intellicus Technologies Pvt. Ltd. | Building a distributed dwarf cube using mapreduce technique |
US20160063078A1 (en) * | 2014-08-29 | 2016-03-03 | Apollo Education Group, Inc. | Automatic identification and tracking of log entry schemas changes |
US9600312B2 (en) | 2014-09-30 | 2017-03-21 | Amazon Technologies, Inc. | Threading as a service |
US9146764B1 (en) | 2014-09-30 | 2015-09-29 | Amazon Technologies, Inc. | Processing event messages for user requests to execute program code |
US9678773B1 (en) | 2014-09-30 | 2017-06-13 | Amazon Technologies, Inc. | Low latency computational capacity provisioning |
US10296630B2 (en) | 2014-10-10 | 2019-05-21 | Salesforce.Com, Inc. | Graph representation of data extraction for use with a data repository |
JP6302817B2 (ja) * | 2014-10-17 | 2018-03-28 | アズビル株式会社 | データ記録装置および方法 |
EP3015984A1 (en) * | 2014-10-29 | 2016-05-04 | Hewlett-Packard Development Company, L.P. | Providing data from data sources |
US9971574B2 (en) * | 2014-10-31 | 2018-05-15 | Oracle International Corporation | JSON stylesheet language transformation |
US9208200B1 (en) * | 2014-11-01 | 2015-12-08 | Veeva Systems Inc. | System and method for reporting multiple objects in enterprise content management |
US9628350B2 (en) * | 2014-11-05 | 2017-04-18 | Amazon Technologies, Inc. | Dynamic scaling of storage volumes for storage client file systems |
US10437819B2 (en) * | 2014-11-14 | 2019-10-08 | Ab Initio Technology Llc | Processing queries containing a union-type operation |
US10291493B1 (en) | 2014-12-05 | 2019-05-14 | Quest Software Inc. | System and method for determining relevant computer performance events |
US10120905B2 (en) * | 2014-12-22 | 2018-11-06 | Amazon Technologies, Inc. | Efficient determination of join paths via cardinality estimation |
US10685042B2 (en) * | 2014-12-22 | 2020-06-16 | Amazon Technologies, Inc. | Identifying join relationships based on transactional access patterns |
CN107431664B (zh) | 2015-01-23 | 2021-03-12 | 电子湾有限公司 | 消息传递系统和方法 |
WO2016115735A1 (en) | 2015-01-23 | 2016-07-28 | Murthy Sharad R | Processing high volume network data |
US20160224594A1 (en) * | 2015-02-03 | 2016-08-04 | Simba Technologies Inc. | Schema Definition Tool |
US9588790B1 (en) | 2015-02-04 | 2017-03-07 | Amazon Technologies, Inc. | Stateful virtual compute system |
US9733967B2 (en) | 2015-02-04 | 2017-08-15 | Amazon Technologies, Inc. | Security protocols for low latency execution of program code |
US11386107B1 (en) | 2015-02-13 | 2022-07-12 | Omnicom Media Group Holdings Inc. | Variable data source dynamic and automatic ingestion and auditing platform apparatuses, methods and systems |
US10649964B2 (en) * | 2015-02-26 | 2020-05-12 | Red Hat, Inc. | Incorporating external data into a database schema |
US10833940B2 (en) | 2015-03-09 | 2020-11-10 | Vapor IO Inc. | Autonomous distributed workload and infrastructure scheduling |
US10579354B2 (en) * | 2015-03-10 | 2020-03-03 | Kordata, Llc | Method and system for rapid deployment and execution of customized functionality across multiple distinct platforms |
US20160267119A1 (en) * | 2015-03-13 | 2016-09-15 | Microsoft Technology Licensing, Llc | Index building in hybrid data system |
IN2015CH02357A (ja) * | 2015-05-08 | 2015-05-22 | Wipro Ltd | |
WO2016183545A1 (en) | 2015-05-14 | 2016-11-17 | Walleye Software, LLC | Distributed and optimized garbage collection of remote and exported table handle links to update propagation graph nodes |
US10187260B1 (en) | 2015-05-29 | 2019-01-22 | Quest Software Inc. | Systems and methods for multilayer monitoring of network function virtualization architectures |
US10025822B2 (en) | 2015-05-29 | 2018-07-17 | Oracle International Corporation | Optimizing execution plans for in-memory-aware joins |
US11436667B2 (en) | 2015-06-08 | 2022-09-06 | Qubole, Inc. | Pure-spot and dynamically rebalanced auto-scaling clusters |
US20160371345A1 (en) * | 2015-06-22 | 2016-12-22 | International Business Machines Corporation | Preprocessing Heterogeneously-Structured Electronic Documents for Data Warehousing |
US9858299B2 (en) * | 2015-06-24 | 2018-01-02 | Oracle International Corporation | System and method for generating a JSON schema from a JSON stream |
US10733198B1 (en) | 2015-06-29 | 2020-08-04 | Trifacta Inc. | Visual interactions for transforming datasets with nested data structures |
US10067954B2 (en) | 2015-07-22 | 2018-09-04 | Oracle International Corporation | Use of dynamic dictionary encoding with an associated hash table to support many-to-many joins and aggregations |
US10387386B2 (en) * | 2015-08-11 | 2019-08-20 | International Business Machines Corporation | Automatic attribute structural variation detection for not only structured query language database |
US10776357B2 (en) * | 2015-08-26 | 2020-09-15 | Infosys Limited | System and method of data join and metadata configuration |
US10200252B1 (en) * | 2015-09-18 | 2019-02-05 | Quest Software Inc. | Systems and methods for integrated modeling of monitored virtual desktop infrastructure systems |
US10387578B1 (en) * | 2015-09-28 | 2019-08-20 | Amazon Technologies, Inc. | Utilization limiting for nested object queries |
US9881054B2 (en) | 2015-09-30 | 2018-01-30 | International Business Machines Corporation | System and method of query processing with schema change in JSON document store |
US10922418B2 (en) * | 2015-10-01 | 2021-02-16 | Twistlock, Ltd. | Runtime detection and mitigation of vulnerabilities in application software containers |
US10599678B2 (en) * | 2015-10-23 | 2020-03-24 | Numerify, Inc. | Input gathering system and method for defining, refining or validating star schema for a source database |
CN106682004A (zh) * | 2015-11-06 | 2017-05-17 | 网宿科技股份有限公司 | 一种Redis Key管理方法及系统 |
CN106815246A (zh) * | 2015-11-30 | 2017-06-09 | 北京国双科技有限公司 | 非关系型数据库中的文档存储方法及装置 |
US11468053B2 (en) * | 2015-12-30 | 2022-10-11 | Dropbox, Inc. | Servicing queries of a hybrid event index |
US10866940B2 (en) * | 2015-12-31 | 2020-12-15 | Fireeye, Inc. | Method, apparatus, and computer-readable medium for ingesting semi-structured data in a columnar format |
WO2017143405A1 (en) * | 2016-02-26 | 2017-08-31 | Cryspintel Pty Ltd | A data source system agnostic fact category partitioned information repository and methods for the insertion and retrieval of data using the information repository |
BE1024144B1 (nl) * | 2016-03-02 | 2017-11-22 | Integrit Sa/Nv | Verbeterde constructie van databaseschemamodellen voor databasesystemen en rest api’s |
US10055358B2 (en) | 2016-03-18 | 2018-08-21 | Oracle International Corporation | Run length encoding aware direct memory access filtering engine for scratchpad enabled multicore processors |
US10402425B2 (en) | 2016-03-18 | 2019-09-03 | Oracle International Corporation | Tuple encoding aware direct memory access engine for scratchpad enabled multi-core processors |
US10061714B2 (en) | 2016-03-18 | 2018-08-28 | Oracle International Corporation | Tuple encoding aware direct memory access engine for scratchpad enabled multicore processors |
US10061832B2 (en) | 2016-11-28 | 2018-08-28 | Oracle International Corporation | Database tuple-encoding-aware data partitioning in a direct memory access engine |
US10452792B1 (en) * | 2016-03-29 | 2019-10-22 | Amazon Technologies, Inc. | Simulating demand and load on storage servers |
CN108885568B (zh) * | 2016-03-30 | 2022-01-28 | 亚马逊技术有限公司 | 用于通过按需代码执行环境处理数据源内的多个数据项的系统和计算机实现的方法 |
US10025656B2 (en) * | 2016-03-30 | 2018-07-17 | Wipro Limited | Method and system for facilitating operation of an electronic device |
US11797495B2 (en) * | 2016-04-11 | 2023-10-24 | Oracle International Corporation | Simulating data definition triggers in a database system |
US20170308606A1 (en) * | 2016-04-22 | 2017-10-26 | Quest Software Inc. | Systems and methods for using a structured query dialect to access document databases and merging with other sources |
WO2017190153A1 (en) * | 2016-04-29 | 2017-11-02 | Unifi Software | Automatic generation of structured data from semi-structured data |
CN106021523B (zh) * | 2016-05-24 | 2019-07-26 | 北京交通大学 | 基于json的数据仓库存储及查询方法 |
US11080207B2 (en) | 2016-06-07 | 2021-08-03 | Qubole, Inc. | Caching framework for big-data engines in the cloud |
US11514069B1 (en) * | 2016-06-10 | 2022-11-29 | Amazon Technologies, Inc. | Aggregation of contextual data and internet of things (IoT) device data |
US10248692B2 (en) * | 2016-06-15 | 2019-04-02 | International Business Machines Corporation | Cardinality estimation of a join predicate |
US10102040B2 (en) | 2016-06-29 | 2018-10-16 | Amazon Technologies, Inc | Adjusting variable limit on concurrent code executions |
CN109478151B (zh) * | 2016-06-29 | 2022-03-29 | 亚马逊技术有限公司 | 网络可访问数据卷修改 |
US10230601B1 (en) | 2016-07-05 | 2019-03-12 | Quest Software Inc. | Systems and methods for integrated modeling and performance measurements of monitored virtual desktop infrastructure systems |
WO2018011985A1 (ja) * | 2016-07-15 | 2018-01-18 | 株式会社日立製作所 | 管理システム及びプラットフォーム構築支援方法 |
US10922278B2 (en) * | 2016-07-22 | 2021-02-16 | Albert Haag | Systems and methods for database compression and evaluation |
US10956467B1 (en) * | 2016-08-22 | 2021-03-23 | Jpmorgan Chase Bank, N.A. | Method and system for implementing a query tool for unstructured data files |
US10503923B1 (en) | 2016-08-31 | 2019-12-10 | Amazon Technologies, Inc. | Centralized data store for multiple data processing environments |
US10353930B2 (en) | 2016-08-31 | 2019-07-16 | International Business Machines Corporation | Generating a trust factor for data in non-relational or relational databases |
US10606664B2 (en) | 2016-09-07 | 2020-03-31 | Qubole Inc. | Heterogeneous auto-scaling big-data clusters in the cloud |
WO2018053024A1 (en) * | 2016-09-13 | 2018-03-22 | The Bank Of New York Mellon | Organizing datasets for adaptive responses to queries |
US10437564B1 (en) * | 2016-09-16 | 2019-10-08 | Software Tree, LLC | Object mapping and conversion system |
US11151097B2 (en) * | 2016-09-25 | 2021-10-19 | Microsoft Technology Licensing, Llc | Dynamic schema inference and enforcement |
WO2018067624A1 (en) | 2016-10-05 | 2018-04-12 | Wal-Mart Stores, Inc. | Systems and methods for synchronizing database schema |
CN106502802A (zh) * | 2016-10-12 | 2017-03-15 | 山东浪潮云服务信息科技有限公司 | 一种基于Avro RPC传输的分布式云端并发采集方法 |
CN106503210A (zh) * | 2016-11-03 | 2017-03-15 | 北京集奥聚合科技有限公司 | 一种hive持久化函数的控制方法及系统 |
CN106528341B (zh) * | 2016-11-09 | 2019-07-30 | 上海新炬网络信息技术股份有限公司 | 基于Greenplum数据库的自动化容灾系统 |
US10102229B2 (en) * | 2016-11-09 | 2018-10-16 | Palantir Technologies Inc. | Validating data integrations using a secondary data store |
US10482098B2 (en) | 2016-11-14 | 2019-11-19 | Microsoft Technology Licensing, Llc | Consuming streamed data records |
CN106557574B (zh) * | 2016-11-23 | 2020-02-04 | 广东电网有限责任公司佛山供电局 | 基于树结构的目标地址匹配方法和系统 |
US10459859B2 (en) | 2016-11-28 | 2019-10-29 | Oracle International Corporation | Multicast copy ring for database direct memory access filtering engine |
US10725947B2 (en) | 2016-11-29 | 2020-07-28 | Oracle International Corporation | Bit vector gather row count calculation and handling in direct memory access engine |
CN108241657B (zh) * | 2016-12-24 | 2022-01-07 | 北京亿阳信通科技有限公司 | 一种web数据列表处理方法及装置 |
CN108076036A (zh) * | 2017-01-06 | 2018-05-25 | 哈尔滨安天科技股份有限公司 | 一种威胁向量提取与标签标注的系统及方法 |
CN108614689B (zh) * | 2017-01-09 | 2021-08-13 | 斑马智行网络(香港)有限公司 | 场景服务的生成方法、装置和终端设备 |
US10614087B2 (en) | 2017-01-17 | 2020-04-07 | International Business Machines Corporation | Data analytics on distributed databases |
CN108255897B (zh) * | 2017-02-17 | 2020-07-21 | 平安科技(深圳)有限公司 | 可视化图表数据转换处理方法和装置 |
CA2997071A1 (en) * | 2017-03-03 | 2018-09-03 | Next Pathway Inc. | Metadata-driven data management platform |
US11182549B2 (en) | 2017-03-06 | 2021-11-23 | AppExtremes, LLC | Systems and methods for modifying and reconciling negotiated documents |
WO2019108413A1 (en) * | 2017-03-06 | 2019-06-06 | AppExtremes, LLC | Systems and methods for modifying and reconciling negotiated documents |
US10540366B2 (en) | 2017-03-09 | 2020-01-21 | Bank Of America Corporation | Transforming data structures and data objects for migrating data between databases having different schemas |
CN106934011A (zh) * | 2017-03-09 | 2017-07-07 | 济南浪潮高新科技投资发展有限公司 | 一种json数据的结构化解析方法及装置 |
JP6480495B2 (ja) * | 2017-03-16 | 2019-03-13 | ヤフー株式会社 | データ管理装置、データ管理方法、およびプログラム |
US10698873B2 (en) * | 2017-03-30 | 2020-06-30 | Microsoft Technology Licensing, Llc | Performance data storage |
WO2018200348A1 (en) * | 2017-04-24 | 2018-11-01 | President And Fellows Of Harvard College | Systems and methods for accelerating exploratory statistical analysis |
US11119992B2 (en) * | 2017-04-25 | 2021-09-14 | Petuum, Inc. | System for automated data engineering for large scale machine learning |
US10817490B2 (en) | 2017-04-28 | 2020-10-27 | Microsoft Technology Licensing, Llc | Parser for schema-free data exchange format |
GB2546459B (en) * | 2017-05-10 | 2018-02-28 | Tomlinson Martin | Data verification |
US10733024B2 (en) | 2017-05-24 | 2020-08-04 | Qubole Inc. | Task packing scheduling process for long running applications |
US10216823B2 (en) | 2017-05-31 | 2019-02-26 | HarperDB, Inc. | Systems, methods, and apparatus for hierarchical database |
CN107145601B (zh) * | 2017-06-02 | 2020-08-14 | 北京数语科技有限公司 | 一种高效的引用关系发现方法 |
US11416466B2 (en) * | 2017-06-02 | 2022-08-16 | Chaossearch, Inc. | Data edge platform for improved storage and analytics |
US10846285B2 (en) * | 2017-06-02 | 2020-11-24 | Chaossearch, Inc. | Materialization for data edge platform |
JP6758252B2 (ja) * | 2017-06-05 | 2020-09-23 | Kddi株式会社 | ヒストグラム生成方法、ヒストグラム生成装置及びヒストグラム生成プログラム |
US11048673B2 (en) | 2017-06-28 | 2021-06-29 | StreamSets, Inc. | Automatic drift detection and handling |
US10747731B2 (en) * | 2017-07-20 | 2020-08-18 | Vmware, Inc. | Transferring data using unique identifiers of a table of a relational database |
JP6881124B2 (ja) * | 2017-07-21 | 2021-06-02 | 富士通株式会社 | 検索制御プログラム、検索制御方法および検索制御装置 |
US9934287B1 (en) | 2017-07-25 | 2018-04-03 | Capital One Services, Llc | Systems and methods for expedited large file processing |
WO2019035903A1 (en) * | 2017-08-16 | 2019-02-21 | Walmart Apollo, Llc | SYSTEMS AND METHODS FOR VALIDATION OF DISTRIBUTED DATA |
US10002154B1 (en) | 2017-08-24 | 2018-06-19 | Illumon Llc | Computer data system data source having an update propagation graph with feedback cyclicality |
US10257058B1 (en) | 2018-04-27 | 2019-04-09 | Banjo, Inc. | Ingesting streaming signals |
US11025693B2 (en) | 2017-08-28 | 2021-06-01 | Banjo, Inc. | Event detection from signal data removing private information |
US10313413B2 (en) * | 2017-08-28 | 2019-06-04 | Banjo, Inc. | Detecting events from ingested communication signals |
US10324948B1 (en) | 2018-04-27 | 2019-06-18 | Banjo, Inc. | Normalizing ingested signals |
US20190251138A1 (en) | 2018-02-09 | 2019-08-15 | Banjo, Inc. | Detecting events from features derived from multiple ingested signals |
US10581945B2 (en) | 2017-08-28 | 2020-03-03 | Banjo, Inc. | Detecting an event from signal data |
US11010223B2 (en) * | 2017-09-01 | 2021-05-18 | Infosys Limited | Method and system of automatic event and error correlation from log data |
US11244025B2 (en) * | 2017-09-12 | 2022-02-08 | Facebook, Inc. | Systems and methods for updating data pipelines |
US10747814B2 (en) * | 2017-09-29 | 2020-08-18 | Oracle International Corporation | Handling semi-structured and unstructured data in a sharded database environment |
US10771584B2 (en) * | 2017-11-30 | 2020-09-08 | Cisco Technology, Inc. | Provisioning using pre-fetched data in serverless computing environments |
JP6550448B2 (ja) * | 2017-12-18 | 2019-07-24 | ヤフー株式会社 | データ管理装置、データ管理方法、およびプログラム |
US11010374B2 (en) | 2017-12-21 | 2021-05-18 | International Business Machines Corporation | Method and system for building a data grouping platform |
CN108268615B (zh) * | 2018-01-02 | 2021-10-26 | 中国工商银行股份有限公司 | 一种数据处理方法、装置以及系统 |
US11228489B2 (en) | 2018-01-23 | 2022-01-18 | Qubole, Inc. | System and methods for auto-tuning big data workloads on cloud platforms |
US10503497B2 (en) * | 2018-01-30 | 2019-12-10 | Microsoft Technology Licensing, Llc | Techniques for utilizing an expression language in service configuration files |
US10324935B1 (en) | 2018-02-09 | 2019-06-18 | Banjo, Inc. | Presenting event intelligence and trends tailored per geographic area granularity |
US10970184B2 (en) | 2018-02-09 | 2021-04-06 | Banjo, Inc. | Event detection removing private information |
US10261846B1 (en) | 2018-02-09 | 2019-04-16 | Banjo, Inc. | Storing and verifying the integrity of event related data |
US10585724B2 (en) | 2018-04-13 | 2020-03-10 | Banjo, Inc. | Notifying entities of relevant events |
US10313865B1 (en) | 2018-04-27 | 2019-06-04 | Banjo, Inc. | Validating and supplementing emergency call information |
WO2019164807A1 (en) * | 2018-02-20 | 2019-08-29 | Veniam, Inc. | Systems and methods for real-time handling and processing of data in a network of moving things |
US11055650B2 (en) * | 2018-02-27 | 2021-07-06 | Logistiview, Inc. | Execution systems using unstructured data |
US11157510B2 (en) | 2018-02-28 | 2021-10-26 | Chaossearch, Inc. | Data normalization using data edge platform |
US11693832B2 (en) * | 2018-03-15 | 2023-07-04 | Vmware, Inc. | Flattening of hierarchical data into a relational schema in a computing system |
US11269821B2 (en) * | 2018-04-04 | 2022-03-08 | Oracle International Corporation | Method and system for generating schemas |
CN110377577B (zh) * | 2018-04-11 | 2022-03-04 | 北京嘀嘀无限科技发展有限公司 | 数据同步方法、装置、系统和计算机可读存储介质 |
US10353934B1 (en) | 2018-04-27 | 2019-07-16 | Banjo, Inc. | Detecting an event from signals in a listening area |
US10327116B1 (en) | 2018-04-27 | 2019-06-18 | Banjo, Inc. | Deriving signal location from signal content |
US10904720B2 (en) | 2018-04-27 | 2021-01-26 | safeXai, Inc. | Deriving signal location information and removing private information from it |
CN108776678B (zh) * | 2018-05-29 | 2020-07-03 | 阿里巴巴集团控股有限公司 | 基于移动端NoSQL数据库的索引创建方法及装置 |
US10936624B2 (en) | 2018-06-12 | 2021-03-02 | Sap Se | Development and productive use of system with parallel use of production data and zero downtime of software changes |
US10853115B2 (en) | 2018-06-25 | 2020-12-01 | Amazon Technologies, Inc. | Execution of auxiliary functions in an on-demand network code execution system |
US11032386B2 (en) * | 2018-07-08 | 2021-06-08 | Nimbella Corp. | Matrix data system for computation of exact and proximate solutions |
US11099870B1 (en) | 2018-07-25 | 2021-08-24 | Amazon Technologies, Inc. | Reducing execution times in an on-demand network code execution system using saved machine states |
CN109376339B (zh) * | 2018-08-02 | 2020-07-03 | 浙江大学 | 一种基于用户行为的文本转换候选规则信息提取方法 |
CN109254989B (zh) * | 2018-08-27 | 2020-11-20 | 望海康信(北京)科技股份公司 | 一种基于元数据驱动的弹性etl架构设计的方法及装置 |
WO2020077027A1 (en) * | 2018-10-11 | 2020-04-16 | Varada Ltd. | Method and system for executing queries on indexed views |
US10635360B1 (en) * | 2018-10-29 | 2020-04-28 | International Business Machines Corporation | Adjusting data ingest based on compaction rate in a dispersed storage network |
US11943093B1 (en) | 2018-11-20 | 2024-03-26 | Amazon Technologies, Inc. | Network connection recovery after virtual machine transition in an on-demand network code execution system |
US11182409B2 (en) | 2018-11-21 | 2021-11-23 | International Business Machines Corporation | Data processing with tags |
EP3660733B1 (en) | 2018-11-30 | 2023-06-28 | Tata Consultancy Services Limited | Method and system for information extraction from document images using conversational interface and database querying |
US11636431B2 (en) | 2019-01-04 | 2023-04-25 | AppExtremes, LLC | Systems and methods for dynamic assignment, monitoring and management of discrete tasks |
US11853359B1 (en) | 2019-01-31 | 2023-12-26 | Veeva Systems Inc. | System and method for reporting multiple objects in enterprise content management |
US11861386B1 (en) | 2019-03-22 | 2024-01-02 | Amazon Technologies, Inc. | Application gateways in an on-demand network code execution system |
US11809382B2 (en) | 2019-04-01 | 2023-11-07 | Nutanix, Inc. | System and method for supporting versioned objects |
CN110138828A (zh) * | 2019-04-08 | 2019-08-16 | 青岛民航凯亚系统集成有限公司 | 机场动态终端实时数据监控处理方法 |
US20220092130A1 (en) * | 2019-04-11 | 2022-03-24 | Mikko Kalervo Vaananen | Intelligent search engine |
CN111831423A (zh) * | 2019-04-15 | 2020-10-27 | 阿里巴巴集团控股有限公司 | 一种在非易失性内存上实现Redis内存数据库的方法和系统 |
US11221788B2 (en) * | 2019-04-26 | 2022-01-11 | Shichao Jin | Data storage method and data storage engine |
US10423662B1 (en) * | 2019-05-24 | 2019-09-24 | Hydrolix Inc. | Efficient and scalable time-series data storage and retrieval over a network |
US11704316B2 (en) | 2019-05-31 | 2023-07-18 | Qubole, Inc. | Systems and methods for determining peak memory requirements in SQL processing engines with concurrent subtasks |
US11144360B2 (en) | 2019-05-31 | 2021-10-12 | Qubole, Inc. | System and method for scheduling and running interactive database queries with service level agreements in a multi-tenant processing system |
US11221998B2 (en) | 2019-05-31 | 2022-01-11 | Microsoft Technology Licensing, Llc | Ingesting and processing content types |
US10911379B1 (en) | 2019-06-12 | 2021-02-02 | Amazon Technologies, Inc. | Message schema management service for heterogeneous event-driven computing environments |
US11119809B1 (en) | 2019-06-20 | 2021-09-14 | Amazon Technologies, Inc. | Virtualization-based transaction handling in an on-demand network code execution system |
US11170048B2 (en) * | 2019-06-25 | 2021-11-09 | Adobe Inc. | System for identifying typed graphlets |
US10582343B1 (en) | 2019-07-29 | 2020-03-03 | Banjo, Inc. | Validating and supplementing emergency call information |
US11341154B2 (en) * | 2019-08-20 | 2022-05-24 | Adobe Inc. | Normalizing encodings of requested data from a common data schema to a target data schema |
US11182368B2 (en) * | 2019-09-24 | 2021-11-23 | International Business Machines Corporation | Indexing data in a table based on data usage statistics |
US11675752B2 (en) * | 2019-09-27 | 2023-06-13 | Atlassian Pty Ltd. | Systems and methods for generating schema notifications |
CN110738023B (zh) * | 2019-10-17 | 2020-10-30 | 深圳旗鱼体育传播有限公司 | 一种将json天气数据转换为jpeg图片的系统及方法 |
US11416386B2 (en) | 2019-12-02 | 2022-08-16 | Curtail, Inc. | Behavior-based comparison of software |
US11449461B2 (en) * | 2019-12-17 | 2022-09-20 | Visa International Service Association | Metadata-driven distributed dynamic reader and writer |
US11726995B2 (en) | 2019-12-17 | 2023-08-15 | Hewlett Packard Enterprise Development Lp | System and method for value pack generation using generic SQL plugin for unified console |
US10719490B1 (en) | 2019-12-19 | 2020-07-21 | Capital One Services, Llc | Forensic analysis using synthetic datasets |
US11836122B2 (en) | 2019-12-19 | 2023-12-05 | Capital One Services, Llc | Schema validation with data synthesis |
CN111049854B (zh) * | 2019-12-25 | 2021-12-14 | 微民保险代理有限公司 | 一种服务请求的传输方法和装置 |
US11567939B2 (en) * | 2019-12-26 | 2023-01-31 | Snowflake Inc. | Lazy reassembling of semi-structured data |
US11429561B2 (en) * | 2019-12-26 | 2022-08-30 | Yahoo Assets Llc | Replacing database table join keys with index keys |
US11308090B2 (en) | 2019-12-26 | 2022-04-19 | Snowflake Inc. | Pruning index to support semi-structured data types |
CN111190929B (zh) * | 2019-12-27 | 2023-07-14 | 四川师范大学 | 数据存储查询方法、装置、电子设备及存储介质 |
US11327962B1 (en) * | 2020-01-23 | 2022-05-10 | Rockset, Inc. | Real-time analytical database system for querying data of transactional systems |
US11609777B2 (en) | 2020-02-19 | 2023-03-21 | Nutanix, Inc. | System and method for multi-cluster storage |
US11372871B1 (en) * | 2020-02-21 | 2022-06-28 | Rapid7, Inc. | Programmable framework for distributed computation of statistical functions over time-based data |
US11341135B2 (en) | 2020-02-28 | 2022-05-24 | International Business Machines Corporation | Optimizing JSON document usage |
US11714682B1 (en) | 2020-03-03 | 2023-08-01 | Amazon Technologies, Inc. | Reclaiming computing resources in an on-demand code execution system |
CN111522879B (zh) * | 2020-04-16 | 2023-09-29 | 北京雷石天地电子技术有限公司 | 一种基于缓存的数据分发方法和电子设备 |
US11436229B2 (en) | 2020-04-28 | 2022-09-06 | Nutanix, Inc. | System and method of updating temporary bucket based on object attribute relationships or metadata relationships |
US20210357770A1 (en) * | 2020-05-13 | 2021-11-18 | Paypal, Inc. | Dynamic Determination of Data Load Process for a Rule Engine in a Decision Service |
US11487787B2 (en) | 2020-05-29 | 2022-11-01 | Nutanix, Inc. | System and method for near-synchronous replication for object store |
CN111625300B (zh) * | 2020-06-08 | 2023-03-24 | 成都信息工程大学 | 一种高效的数据采集加载方法及系统 |
US11886394B2 (en) * | 2020-08-25 | 2024-01-30 | Red Hat, Inc. | Composable query language gateway routing protocol |
CN112069201A (zh) * | 2020-09-04 | 2020-12-11 | 北京百度网讯科技有限公司 | 目标数据的获取方法和装置 |
CN112070636B (zh) * | 2020-09-09 | 2023-03-21 | 西南交通大学 | 一种具有多级证据链的图像电子合同签署及验证方法 |
US11693816B2 (en) * | 2020-09-17 | 2023-07-04 | ActionIQ, Inc. | Flexible data ingestion |
US12001872B2 (en) | 2020-10-14 | 2024-06-04 | Nutanix, Inc. | Object tiering from local store to cloud store |
TWI809320B (zh) * | 2020-10-14 | 2023-07-21 | 國立中央大學 | 適應性多屬性索引結構 |
CN112380163A (zh) * | 2020-10-20 | 2021-02-19 | 广州西山居世游网络科技有限公司 | S3文件系统空间占用监控方法及系统 |
US11775487B2 (en) * | 2020-11-12 | 2023-10-03 | Western Digital Technologies, Inc. | Automatic flexible schema detection and migration |
US11900164B2 (en) | 2020-11-24 | 2024-02-13 | Nutanix, Inc. | Intelligent query planning for metric gateway |
US11550713B1 (en) | 2020-11-25 | 2023-01-10 | Amazon Technologies, Inc. | Garbage collection in distributed systems using life cycled storage roots |
US11593270B1 (en) | 2020-11-25 | 2023-02-28 | Amazon Technologies, Inc. | Fast distributed caching using erasure coded object parts |
US11822370B2 (en) | 2020-11-26 | 2023-11-21 | Nutanix, Inc. | Concurrent multiprotocol access to an object storage system |
CN112579287B (zh) * | 2020-12-16 | 2024-07-30 | 跬云(上海)信息科技有限公司 | 一种基于读写分离及自动伸缩的云编排系统及方法 |
US11928096B2 (en) * | 2020-12-16 | 2024-03-12 | Sap Se | Systems and methods using generic database search models |
US11281689B1 (en) * | 2021-01-13 | 2022-03-22 | Sas Institute Inc. | Distributed interaction feature generation system |
KR102449580B1 (ko) * | 2021-02-15 | 2022-09-30 | (주)아이브릭스 | 컴포넌트 네트워크 기반의 분석 시스템을 이용한 비정형 데이터 분석 방법 |
US11853272B2 (en) | 2021-02-19 | 2023-12-26 | International Business Machines Corporation | Governance based validation framework for JSON data using machine learning |
CN112783901B (zh) * | 2021-03-01 | 2023-09-01 | 合沃物联技术(南京)有限公司 | 一种基于物联网中间件的物联网时序大数据处理方法 |
CN112653771B (zh) * | 2021-03-15 | 2021-06-01 | 浙江贵仁信息科技股份有限公司 | 水利数据分片存储方法、点播方法、处理系统 |
US11693852B1 (en) | 2021-04-12 | 2023-07-04 | Amdocs Development Limited | System, method, and computer program for normalizing a JSON structure |
US11816157B2 (en) | 2021-05-05 | 2023-11-14 | Google Llc | Efficient storage and query of schemaless data |
WO2022250547A1 (en) * | 2021-05-28 | 2022-12-01 | Xero Limited | Methods and systems for web-based data presentation |
CN113326031B (zh) * | 2021-05-28 | 2023-08-22 | 网易(杭州)网络有限公司 | 属性获取方法和装置 |
CN113297296B (zh) * | 2021-05-31 | 2022-08-16 | 西南大学 | 多样式类型数据的json化处理方法 |
US11388210B1 (en) | 2021-06-30 | 2022-07-12 | Amazon Technologies, Inc. | Streaming analytics using a serverless compute system |
US11748352B2 (en) * | 2021-08-26 | 2023-09-05 | International Business Machines Corporation | Dynamical database system resource balance |
US11899572B2 (en) | 2021-09-09 | 2024-02-13 | Nutanix, Inc. | Systems and methods for transparent swap-space virtualization |
US11893038B2 (en) * | 2021-10-21 | 2024-02-06 | Treasure Data, Inc. | Data type based visual profiling of large-scale database tables |
US12032857B2 (en) | 2021-11-22 | 2024-07-09 | Nutanix, Inc. | System and method for shallow copy |
US11968280B1 (en) | 2021-11-24 | 2024-04-23 | Amazon Technologies, Inc. | Controlling ingestion of streaming data to serverless function executions |
WO2023096587A2 (en) * | 2021-11-29 | 2023-06-01 | Shopee IP Singapore Private Limited | Device and method for preparing data for responding to database queries |
US12015603B2 (en) | 2021-12-10 | 2024-06-18 | Amazon Technologies, Inc. | Multi-tenant mode for serverless code execution |
US12020352B2 (en) * | 2022-01-04 | 2024-06-25 | Accenture Global Solutions Limited | Project visualization system |
US20230281213A1 (en) * | 2022-02-03 | 2023-09-07 | Datametica Solutions Private Limited | System and method for data warehouse workload transformation |
US11693869B1 (en) | 2022-02-04 | 2023-07-04 | Bank Of America Corporation | Processing queries and commands using a universal intelli-shell instrument |
US11755863B1 (en) | 2022-03-02 | 2023-09-12 | Ricoh Company, Ltd. | Ink estimation model updates for production printers |
US11775791B2 (en) | 2022-03-02 | 2023-10-03 | Ricoh Company, Ltd. | Cloud-based parallel ink estimation for production printers |
US12061632B2 (en) * | 2022-03-29 | 2024-08-13 | Treasure Data, Inc. | Interactive adaptation of machine learning models for time series data |
CN114741393B (zh) * | 2022-04-19 | 2023-04-28 | 四川大学 | 一种材料基因工程数据转换及检索方法 |
US11928125B2 (en) * | 2022-07-05 | 2024-03-12 | Capital One Services, Llc | Cleaning and organizing schemaless semi-structured data for extract, transform, and load processing |
US20240045880A1 (en) * | 2022-08-02 | 2024-02-08 | Sap Se | Compact error tracking logs for etl |
US11947559B1 (en) | 2022-10-10 | 2024-04-02 | Bank Of America Corporation | Dynamic schema identification to process incoming data feeds in a database system |
US11829340B1 (en) * | 2023-06-22 | 2023-11-28 | Citibank, N.A. | Systems and methods for generating data transfers using programming language-agnostic data modeling platforms |
CN116955363B (zh) * | 2023-09-21 | 2023-12-26 | 北京四维纵横数据技术有限公司 | 无模式数据创建索引方法、装置、计算机设备及介质 |
Family Cites Families (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7007003B1 (en) | 1998-12-04 | 2006-02-28 | Intellisync Corporation | Notification protocol for establishing synchronization mode for use in synchronizing databases |
KR100424481B1 (ko) | 2000-06-24 | 2004-03-22 | 엘지전자 주식회사 | 디지털 방송 부가서비스 정보의 기록 재생장치 및 방법과그에 따른 기록매체 |
AU2001290646A1 (en) * | 2000-09-08 | 2002-03-22 | The Regents Of The University Of California | Data source integration system and method |
JP4457185B2 (ja) * | 2001-02-13 | 2010-04-28 | ネットアップ,インコーポレイテッド | シリコンベースのストレージ仮想化サーバ |
US6985958B2 (en) * | 2001-03-14 | 2006-01-10 | Microsoft Corporation | Messaging infrastructure for identity-centric data access |
US6785689B1 (en) * | 2001-06-28 | 2004-08-31 | I2 Technologies Us, Inc. | Consolidation of multiple source content schemas into a single target content schema |
US7103848B2 (en) * | 2001-09-13 | 2006-09-05 | International Business Machines Corporation | Handheld electronic book reader with annotation and usage tracking capabilities |
AU2002334721B2 (en) | 2001-09-28 | 2008-10-23 | Oracle International Corporation | An index structure to access hierarchical data in a relational database system |
JP2003157249A (ja) | 2001-11-21 | 2003-05-30 | Degital Works Kk | 文書の圧縮格納方法 |
US6826568B2 (en) * | 2001-12-20 | 2004-11-30 | Microsoft Corporation | Methods and system for model matching |
US7089260B2 (en) * | 2002-02-14 | 2006-08-08 | International Business Machines Corporation | Database optimization apparatus and method |
AUPS300402A0 (en) * | 2002-06-17 | 2002-07-11 | Canon Kabushiki Kaisha | Indexing and querying structured documents |
US6941412B2 (en) * | 2002-08-29 | 2005-09-06 | Sandisk Corporation | Symbol frequency leveling in a storage system |
US20040148278A1 (en) * | 2003-01-22 | 2004-07-29 | Amir Milo | System and method for providing content warehouse |
US7007033B1 (en) * | 2003-04-28 | 2006-02-28 | Microsoft Corporation | Management of markup language data mappings available to a spreadsheet application workbook |
US20040243555A1 (en) * | 2003-05-30 | 2004-12-02 | Oracle International Corp. | Methods and systems for optimizing queries through dynamic and autonomous database schema analysis |
US8386503B2 (en) * | 2004-01-16 | 2013-02-26 | International Business Machines Corporation | Method and apparatus for entity removal from a content management solution implementing time-based flagging for certainty in a relational database environment |
US8271428B2 (en) * | 2004-05-20 | 2012-09-18 | International Business Machines Corporation | Method and system for creating and loading data warehouse from semi-structured document |
US7844570B2 (en) * | 2004-07-09 | 2010-11-30 | Microsoft Corporation | Database generation systems and methods |
US7627589B2 (en) * | 2004-08-10 | 2009-12-01 | Palo Alto Research Center Incorporated | High performance XML storage retrieval system and method |
CN1760871A (zh) | 2004-10-15 | 2006-04-19 | 微软公司 | 将模式数据映射到数据结构 |
US20060085451A1 (en) | 2004-10-15 | 2006-04-20 | Microsoft Corporation | Mapping of schema data into data structures |
US7970730B2 (en) * | 2005-01-27 | 2011-06-28 | Microsoft Corporation | Efficient data access via runtime type inference |
JP2006350924A (ja) * | 2005-06-20 | 2006-12-28 | Hitachi Ltd | 情報処理装置、スキーマ作成方法、及びプログラム |
US9117005B2 (en) * | 2006-05-16 | 2015-08-25 | International Business Machines Corporation | Statistics collection using path-value pairs for relational databases |
US20090132621A1 (en) * | 2006-07-28 | 2009-05-21 | Craig Jensen | Selecting storage location for file storage based on storage longevity and speed |
US20080201295A1 (en) * | 2007-02-21 | 2008-08-21 | Mylavarapu Praveena | Caching plans with using data values |
US20090024590A1 (en) | 2007-03-15 | 2009-01-22 | Sturge Timothy | User contributed knowledge database |
US8868482B2 (en) * | 2008-03-20 | 2014-10-21 | Oracle International Corporation | Inferring schemas from XML document collections |
CN101477572B (zh) * | 2009-01-12 | 2010-12-08 | 深圳市里王智通软件有限公司 | 基于tds过渡数据存储技术的动态数据仓库的方法与系统 |
NL2003447C2 (nl) | 2009-05-20 | 2010-08-16 | Megchelen & Tilanus B V Van | Werkwijze en systeem voor coderen en specificeren van een object. |
US20130024207A1 (en) * | 2011-07-22 | 2013-01-24 | Medtronic, Inc. | Use of patient-centric records to facilitate analysis of outcomes of medical therapies |
CN104160394B (zh) * | 2011-12-23 | 2017-08-15 | 亚马逊科技公司 | 用于半结构化数据的可缩放分析平台 |
US20130339399A1 (en) * | 2012-06-18 | 2013-12-19 | Dexter A. Dorris | Dynamic Schema |
US9075833B2 (en) * | 2013-01-21 | 2015-07-07 | International Business Machines Corporation | Generating XML schema from JSON data |
JP6416194B2 (ja) | 2013-03-15 | 2018-10-31 | アマゾン・テクノロジーズ・インコーポレーテッド | 半構造データのためのスケーラブルな分析プラットフォーム |
-
2014
- 2014-03-14 JP JP2016503110A patent/JP6416194B2/ja active Active
- 2014-03-14 US US14/213,941 patent/US9613068B2/en active Active
- 2014-03-14 WO PCT/US2014/029484 patent/WO2014144889A2/en active Application Filing
- 2014-03-14 CA CA2906816A patent/CA2906816C/en active Active
- 2014-03-14 US US14/210,495 patent/US10275475B2/en active Active
- 2014-03-14 EP EP14764749.9A patent/EP2973051A4/en not_active Withdrawn
- 2014-03-14 CN CN201480021193.7A patent/CN105122243B/zh active Active
- 2014-03-14 CA CA3078018A patent/CA3078018C/en active Active
-
2017
- 2017-04-03 US US15/478,177 patent/US10983967B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US10275475B2 (en) | 2019-04-30 |
EP2973051A4 (en) | 2016-11-16 |
EP2973051A2 (en) | 2016-01-20 |
US20140279834A1 (en) | 2014-09-18 |
US20140279838A1 (en) | 2014-09-18 |
US10983967B2 (en) | 2021-04-20 |
US9613068B2 (en) | 2017-04-04 |
US20170206256A1 (en) | 2017-07-20 |
CN105122243B (zh) | 2019-02-12 |
JP2016519810A (ja) | 2016-07-07 |
CA2906816C (en) | 2020-06-30 |
WO2014144889A3 (en) | 2014-11-06 |
CA3078018A1 (en) | 2014-09-18 |
CN105122243A (zh) | 2015-12-02 |
CA3078018C (en) | 2023-08-22 |
CA2906816A1 (en) | 2014-09-18 |
WO2014144889A2 (en) | 2014-09-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6416194B2 (ja) | 半構造データのためのスケーラブルな分析プラットフォーム | |
JP6617117B2 (ja) | 半構造データのためのスケーラブルな分析プラットフォーム | |
US10977234B2 (en) | Combining compressed and uncompressed data at query time for efficient database analytics | |
US10509785B2 (en) | Policy-driven data manipulation in time-series database systems | |
US11461356B2 (en) | Large scale unstructured database systems | |
KR102627690B1 (ko) | Sql 질의 플랜들을 최적화하기 위한 차원 콘텍스트 전파 기술들 | |
Jensen et al. | Time series management systems: A survey | |
US8918363B2 (en) | Data processing service | |
Marcu | KerA: A Unified Ingestion and Storage System for Scalable Big Data Processing | |
Sinthong et al. | AFrame: Extending DataFrames for large-scale modern data analysis (Extended Version) | |
Leser | OLAP Queries on Big Data Processing Systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20160527 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20160713 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20170621 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20170718 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20171018 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20180306 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20180409 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20180911 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20181003 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6416194 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |