(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-04-24
(54)【発明の名称】スキーマレスデータの効率的なストレージおよびクエリ
(51)【国際特許分類】
G06F 16/84 20190101AFI20240417BHJP
【FI】
G06F16/84
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2023568071
(86)(22)【出願日】2022-04-28
(85)【翻訳文提出日】2023-12-18
(86)【国際出願番号】 US2022071973
(87)【国際公開番号】W WO2022236232
(87)【国際公開日】2022-11-10
(32)【優先日】2021-05-05
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】アロンソ,ルイス
(72)【発明者】
【氏名】グラチョフ,ウラディスラフ
(72)【発明者】
【氏名】アマディ,ホセイン
(72)【発明者】
【氏名】ラン,フランシス
(72)【発明者】
【氏名】ラグハバン,シュリーニディ
(72)【発明者】
【氏名】バラスブラマニアム,ビナイ
(72)【発明者】
【氏名】ブリズニューチェンコ,オレクサンドル
(72)【発明者】
【氏名】スサーラ,シュリナゲシュ
【テーマコード(参考)】
5B175
【Fターム(参考)】
5B175CA02
(57)【要約】
半構造化データ(12U)を記憶する方法(300)は、半構造化ユーザデータを含むユーザデータ(12)を、クエリシステム(150)のユーザ(10)から受信することを含む。本方法は、半構造化ユーザデータが固定スキーマを含まないというインジケーション(14)を受信することを含む。それに応答して、本方法は、半構造化ユーザデータを複数のデータパス(210)にパースすること、および複数のデータパスの各それぞれのデータパスと関連付けられているデータ型(220)を抽出することをさらに含む。本方法は、クエリシステムと通信するデータベースのテーブル(204)に行エントリとして半構造化ユーザデータを記憶することをさらに含み、その行エントリと関連付けられている各列値は、複数のデータパスおよびそれぞれのデータパスと関連付けられているデータ型のそれぞれと対応する。
【特許請求の範囲】
【請求項1】
コンピュータが実行する方法(300)であって、データ処理ハードウェア(114)によって実行されると、
半構造化ユーザデータ(12U)を含むユーザデータ(12)を、クエリシステム(150)のユーザ(10)から受信することと、
前記半構造化ユーザデータ(12U)が固定スキーマを含まないというインジケーション(14)を受信することと、
前記半構造化ユーザデータ(12U)が前記固定スキーマを含まないという前記インジケーション(14)に応答して、
前記半構造化ユーザデータ(12U)を複数のデータパス(210)にパースすることと、
前記複数のデータパス(210)の各それぞれのデータパス(210)と関連付けられているデータ型(220)を抽出することと、
前記クエリシステム(150)と通信するデータベースのテーブル(204)に行エントリとして前記半構造化ユーザデータ(12U)を記憶することと、を含む動作を前記データ処理ハードウェア(114)に行わせ、
前記行エントリと関連付けられている各列値(212)は、前記複数のデータパス(210)およびそれぞれの前記データパス(210)と関連付けられている前記データ型(220)のそれぞれと対応する、方法。
【請求項2】
前記ユーザデータ(12)は、それぞれの固定スキーマを有する構造化ユーザデータ(12S)をさらに含み、
前記データベースの前記テーブル(204)は、前記構造化ユーザデータ(12S)に対応する1つまたは複数の行エントリを含む、請求項1に記載の方法(300)。
【請求項3】
前記半構造化ユーザデータ(12U)は、JavaScript Object Notation(JSON)を含む、請求項1または請求項2に記載の方法(300)。
【請求項4】
前記行エントリと関連付けられているそれぞれの列は、explicit null値を含む、請求項3に記載の方法(300)。
【請求項5】
前記行エントリと関連付けられているそれぞれの列のそれぞれの列値(212)は、空の配列を含む、請求項3に記載の方法(300)。
【請求項6】
前記データベースの前記テーブル(204)における前記行エントリとして前記半構造化ユーザデータ(12U)を記憶することは、
前記半構造化ユーザデータ(12U)からパースされた前記複数のデータパス(210)のうちの第1のデータパス(210)と関連付けられている第1のデータ型(220)および第2のデータ型(220)を識別することと、
前記第1のデータパス(210)の前記第1のデータ型(220)に対応する前記半構造化ユーザデータ(12U)の第1の値(212)を、前記テーブル(204)の第1の列の第1の行エントリに記憶することと、
前記第1のデータパス(210)の前記第2のデータ型(220)に対応する前記半構造化ユーザデータ(12U)の第2の値(212)を、前記テーブル(204)の前記第1の列の第2の行エントリに記憶することとをさらに含み、
前記第2のデータ型(220)は、前記第1のデータ型(220)とは異なるデータ型(220)である、請求項1~請求項5のいずれかに記載の方法(300)。
【請求項7】
前記動作は、クエリ実行時間中に、
前記クエリシステム(150)の前記ユーザ(10)から、記憶されている前記半構造化ユーザデータ(12U)と関連付けられているデータに対するクエリ(160)を受信することと、
前記クエリ(160)に応答して、記憶されている前記半構造化ユーザデータ(12U)のそれぞれのデータパス(210)を決定することと、
前記クエリ(160)に応答して、記憶されている前記半構造化ユーザデータ(12U)の前記それぞれのデータパス(210)に対応する前記行エントリのそれぞれの列値(212)を含むクエリ応答(162)を生成することとをさらに含む、請求項1~請求項6のいずれかに記載の方法(300)。
【請求項8】
前記ユーザデータ(12)は、前記ユーザ(10)と関連付けられているクラウドコンピューティングリソースについてのログデータに対応する、請求項1~請求項7のいずれかに記載の方法(300)。
【請求項9】
前記複数のデータパス(210)の各データパス(210)は、前記半構造化ユーザデータ(12U)のキー値ペアのためのキーに対応する、請求項1~請求項8のいずれかに記載の方法(300)。
【請求項10】
前記行エントリのそれぞれの列値(212)は、ネストされた配列を含む、請求項1~請求項9のいずれかに記載の方法(300)。
【請求項11】
データ処理ハードウェア(114)と、
前記データ処理ハードウェア(114)と通信するメモリハードウェア(116)とを含み、前記メモリハードウェア(116)は、前記データ処理ハードウェア(114)上で実行されると、
半構造化ユーザデータ(12U)を含むユーザデータ(12)を、クエリシステム(150)のユーザ(10)から受信することと、
前記半構造化ユーザデータ(12U)が固定スキーマを含まないというインジケーション(14)を受信することと、
前記半構造化ユーザデータ(12U)が前記固定スキーマを含まないという前記インジケーション(14)に応答して、
前記半構造化ユーザデータ(12U)を複数のデータパス(210)にパースすることと、
前記複数のデータパス(210)の各それぞれのデータパス(210)と関連付けられているデータ型(220)を抽出することと、
前記クエリシステム(150)と通信するデータベースのテーブル(204)に行エントリとして前記半構造化ユーザデータ(12U)を記憶することと、を含む動作を前記データ処理ハードウェア(114)に行わせる命令を記憶し、
前記行エントリと関連付けられている各列値(212)は、前記複数のデータパス(210)およびそれぞれの前記データパス(210)と関連付けられている前記データ型(220)のそれぞれと対応する、システム(100)。
【請求項12】
前記ユーザデータ(12)は、それぞれの固定スキーマを有する構造化ユーザデータ(12S)をさらに含み、
前記データベースの前記テーブル(204)は、前記構造化ユーザデータ(12S)に対応する1つまたは複数の行エントリを含む、請求項11に記載のシステム(100)。
【請求項13】
前記半構造化ユーザデータ(12U)は、JavaScript Object Notation(JSON)を含む、請求項11または請求項12に記載のシステム(100)。
【請求項14】
前記行エントリと関連付けられているそれぞれの列は、explicit null値を含む、請求項13に記載のシステム(100)。
【請求項15】
前記行エントリと関連付けられているそれぞれの列のそれぞれの列値(212)は、空の配列を含む、請求項13に記載のシステム(100)。
【請求項16】
前記データベースの前記テーブル(204)における前記行エントリとして前記半構造化ユーザデータ(12U)を記憶することは、
前記半構造化ユーザデータ(12U)からパースされた前記複数のデータパス(210)のうちの第1のデータパス(210)と関連付けられている第1のデータ型(220)および第2のデータ型(220)を識別することと、
前記第1のデータパス(210)の前記第1のデータ型(220)に対応する前記半構造化ユーザデータ(12U)の第1の値(212)を、前記テーブル(204)の第1の列の第1の行エントリに記憶することと、
前記第1のデータパス(210)の前記第2のデータ型(220)に対応する前記半構造化ユーザデータ(12U)の第2の値(212)を、前記テーブル(204)の前記第1の列の第2の行エントリに記憶することとをさらに含み、
前記第2のデータ型(220)は、前記第1のデータ型(220)とは異なるデータ型(220)である、請求項11~請求項15のいずれかに記載のシステム(100)。
【請求項17】
前記動作は、クエリ実行時間中に、
前記クエリシステム(150)の前記ユーザ(10)から、記憶されている前記半構造化ユーザデータ(12U)と関連付けられているデータに対するクエリ(160)を受信することと、
前記クエリ(160)に応答して、記憶されている前記半構造化ユーザデータ(12U)のそれぞれのデータパス(210)を決定することと、
前記クエリ(160)に応答して、記憶されている前記半構造化ユーザデータ(12U)の前記それぞれのデータパス(210)に対応する前記行エントリのそれぞれの列値(212)を含むクエリ応答(162)を生成することとをさらに含む、請求項11~請求項16のいずれかに記載のシステム(100)。
【請求項18】
前記ユーザデータ(12)は、前記ユーザ(10)と関連付けられているクラウドコンピューティングリソースについてのログデータに対応する、請求項11~請求項17のいずれかに記載のシステム(100)。
【請求項19】
前記複数のデータパス(210)の各データパス(210)は、前記半構造化ユーザデータ(12U)のキー値ペアのためのキーに対応する、請求項11~請求項18のいずれかに記載のシステム(100)。
【請求項20】
前記行エントリのそれぞれの列値(212)は、ネストされた配列を含む、請求項11~請求項19のいずれかに記載のシステム(100)。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、スキーマレスデータの効率的なストレージおよびクエリに関する。
【背景技術】
【0002】
背景
現在、アプリケーションが著しい量のデータを生成するにつれて、クエリシステムおよび他の解析ツールは、データ解析を支援するために進化し続けている。さらに、ユーザが効率的および/または費用効果的なやり方で自身のデータに対して解析を行うことができない場合、膨大な量のユーザデータを生成する価値は著しく小さくなる場合がある。ユーザが自身のデータを解析できることを確実にするために、クエリ処理システムがデータストレージシステムと併せて動作することが始まっている。ユーザデータは、協働することによって、クエリまたは他の解析などの解析動作を促進するストレージ構造に記憶され得る。残念ながら、それらの動作を促進するデータストレージ構造は、半構造化またはスキーマレスデータをサポートする能力において限定される場合が多い。
【発明の概要】
【課題を解決するための手段】
【0003】
概要
本開示の一態様は、半構造化データを記憶する、コンピュータが実行する方法を提供する。本方法は、データ処理ハードウェアによって実行されると、データ処理ハードウェアに動作を行わせる。動作は、クエリシステムのユーザからユーザデータを受信することを含み、ここでユーザデータは非構造化ユーザデータを含む。動作は、非構造化ユーザデータが固定スキーマを含まないというインジケーションを受信することをさらに含む。非構造化ユーザデータが固定スキーマを含まないというインジケーションに応答して、動作は、非構造化ユーザデータを複数のデータパスにパースすること、および複数のデータパスの各それぞれのデータパスと関連付けられているデータ型を抽出することをさらに含む。動作は、クエリシステムと通信するデータベースのテーブルに行エントリとして非構造化ユーザデータを記憶することをさらに含み、その行エントリと関連付けられている各列値は、複数のデータパスおよびそれぞれのデータパスと関連付けられているデータ型のそれぞれと対応する。
【0004】
本開示の別の態様は、非構造化データを記憶できるシステムを提供する。本システムは、データ処理ハードウェアと、データ処理ハードウェアと通信するメモリハードウェアとを含む。メモリハードウェアは、データ処理ハードウェアによって実行されると、データ処理ハードウェアに動作を行わせる命令を記憶する。動作は、クエリシステムのユーザからユーザデータを受信することを含み、ここで、ユーザデータは非構造化ユーザデータを含む。動作は、非構造化ユーザデータが固定スキーマを含まないというインジケーションを受信することをさらに含む。非構造化ユーザデータが固定スキーマを含まないというインジケーションに応答して、動作は、非構造化ユーザデータを複数のデータパスにパースすること、および複数のデータパスの各それぞれのデータパスと関連付けられているデータ型を抽出することをさらに含む。動作は、クエリシステムと通信するデータベースのテーブルに行エントリとして非構造化ユーザデータを記憶することをさらに含み、その行エントリと関連付けられている各列値は、複数のデータパスおよびそれぞれのデータパスと関連付けられているデータ型のそれぞれと対応する。
【0005】
本開示の方法またはシステムの実施態様は、以下の任意選択の特徴のうちの1つまたは複数を含み得る。いくつかの実施態様では、ユーザデータは、それぞれの固定スキーマを有する構造化ユーザデータをさらに含み、データベースのテーブルは、構造化ユーザデータと対応する1つまたは複数の行エントリを含む。いくつかの例では、非構造化ユーザデータは、JavaScript(登録商標) Object Notation(JSON)を含む。これらの例では、行エントリと関連付けられているそれぞれの列は、explicit null値を含み得る。これらの例ではまた、行エントリと関連付けられているそれぞれの列のそれぞれの列値は、空の配列を含み得る。いくつかの構成では、データベースのテーブルに行エントリとして非構造化ユーザデータを記憶することは、非構造化データからパースされた複数のデータパスのうちの第1のデータパスと関連付けられている第1のデータ型および第2のデータ型を識別することをさらに含む。これらの構成では、データベースのテーブルに行エントリとして非構造化ユーザデータを記憶することは、第1のデータパスの第1のデータ型に対応する非構造化ユーザデータの第1の値を、テーブルの第1の列の第1の行エントリに記憶することと、第1のデータパスの第2のデータ型に対応する非構造化ユーザデータの第2の値を、テーブルの第1の列の第2の行エントリに記憶することとをさらに含む。ここで、第2のデータ型は、第1のデータ型とは異なるデータ型である。
【0006】
いくつかの例では、方法またはシステムのための動作はまた、クエリ実行時間中に、クエリシステムのユーザから、記憶されている非構造化データと関連付けられているデータに対するクエリを受信し、クエリに応答して、記憶されている非構造化データのそれぞれのデータパスを決定することと、クエリに応答して、記憶されている非構造化データのそれぞれのデータパスに対応する行エントリのそれぞれの列値を含むクエリ応答を生成することとをさらに含む。ユーザデータは、ユーザと関連付けられているクラウドコンピューティングリソースのためのログデータと対応し得る。複数のデータパスの各データパスは、非構造化ユーザデータのキー値ペアのためのキーに対応し得る。行エントリのそれぞれの列値は、ネストされた配列を含み得る。
【0007】
本開示の1つまたは複数の実施態様の詳細は、添付図面および以下の説明に記載されている。他の態様、特徴、および利点は、本明細書および図面から、ならびに特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【0008】
【
図2A】
図1のデータ管理環境の例示的なスキーママネージャの概略図である。
【
図2B】
図1のデータ管理環境の例示的なスキーママネージャの概略図である。
【
図2C】
図1のデータ管理環境の例示的なスキーママネージャの概略図である。
【
図2D】
図1のデータ管理環境の例示的なスキーママネージャの概略図である。
【
図2E】
図1のデータ管理環境の例示的なスキーママネージャの概略図である。
【
図2F】
図1のデータ管理環境の例示的なスキーママネージャの概略図である。
【
図2G】
図1のデータ管理環境の例示的なスキーママネージャの概略図である。
【
図2H】
図1のデータ管理環境の例示的なスキーママネージャの概略図である。
【
図3】非構造化データを記憶する方法のための動作の例示的な構成のフローチャートである。
【
図4】本明細書で説明するシステムおよび方法を実施するために使用され得る例示的なコンピューティングデバイスの概略図である。
【発明を実施するための形態】
【0009】
様々な図面における同様の参照符号は同様の要素を示す。
詳細な説明
データストレージシステムは、ユーザまたはクライアントデータを1つまたは複数の大規模なクエリ可能テーブルに記憶し得る。テーブルの全体的な構造は、行エントリと呼ばれる行に編成された個別のレコードの何らかの形態のデータを含む。データの行の長さは、テーブルのスキーマおよび/または特定のレコード(すなわち、行)と関連付けられた列またはフィールドの数に基づいて変化し得る。テーブルスキーマは、列名(例えば、フィールド)、特定の列のデータ型、および/または他の情報を定義し得るテーブルの指定形式を指す。すなわち、テーブルのスキーマは、テーブルがどのように編成されるかを規定するテーブルに課された完全性の制約である。例えば、テーブルスキーマは、1つまたは複数の行エントリについて特定の列におけるデータの型またはデータの形態を制約する。一例として、テーブルの特定の列のためのスキーマは、文字列である名前フィールドであり、その列についての行エントリの値は、文字列データ型を有する名前である。
【0010】
いくつかの実施態様では、ストレージシステムは、ストレージシステムが受信するユーザデータの属性に基づいてテーブルスキーマを生成するように構成されている。例えば、ストレージシステムは、取り込みの前に、特定のスキーマによって行指向形式でユーザデータを受信する。他の実施態様では、ユーザまたはクライアントは、ストレージシステムへのユーザデータの任意の転送前に、ユーザデータのスキーマを定義するためにストレージシステムと連携して動作する。これらの場合のいずれかにおいて、記憶されたユーザデータに対してクエリする能力は、どのようにユーザデータがデータストレージシステム内に記憶されているかに依存する。したがって、レコードのデータがテーブルスキーマに基づいてテーブルに行エントリとして記憶されている場合、テーブルスキーマはクエリ処理に影響する。この理由のため、指定されたスキーマを含むデータを指す構造化データは、取り込みを容易にするとともに、クエリ処理中に取り込まれたデータに対する効率的な読み出しおよび/または書き込み動作を可能にし得る。例えば、テーブルの各行はパーツ供給業者からの単一の注文書に対応し、一方、テーブルの列は、パーツ供給業者の名前(すなわち製造業者名)、購入した部品、部品費用、供給業者(すなわち製造業者)の住所、および供給業者識別子(すなわち、会社識別子)などのスキーマを含む。ストレージシステムが新しい注文書レコードを受信すると、ストレージシステムは、そのレコード内のデータをテーブルの適切な列に編成する。このタイプの編成によって、ストレージシステムは、テーブルスキーマを使用した1つまたは複数のアクション(例えば、読み出し動作または書き込み動作)を計画することによって、クエリシステムからのクエリに対して応答できる。例示するために、顧客は、特定のデータ範囲においてどの注文書が発生したかを尋ねるために、ストレージシステムと連携して機能するクエリシステムを使用してもよい。このクエリに応答して、クエリ処理は、注文書を日付ごとにソートした後、クエリによって指定された特定のデータ範囲に対応しないすべての日付をフィルタで除去するクエリプランを生成する。次いで、クエリ処理は、クエリへの応答としてソートおよびフィルタリングの結果を返す。換言すれば、ここで、クエリ処理によって行われたクエリプランは、クエリを効率的に(例えば、最小限のレイテンシで)満たすために、注文書を有するテーブルのスキーマを強化する。
【0011】
残念ながら、現実は、ユーザデータがあらゆる形態をとり得ることである。これが意味することは、指定されたスキーマを有する構造化ユーザデータは、取り込みおよび/またはクエリ処理を容易にするために好ましいが、ユーザデータはまた、非構造化データまたは半構造化データであり得るということである。ここで、非構造化または半構造化データは、固定スキーマを有さないデータを指す。例えば、非構造化データは、全体的もしくは完全にスキーマを有さないデータを指し得るが、一方、半構造化データは、部分的にスキーマを有さないデータを指し得る。したがって、非構造化データまたは半構造化データという用語は、データの何らかの部分が固定スキーマを有さないデータを指す。この非構造化または半構造化データは、データの構造がエントリ間(すなわちレコード間)で異なる場合があるため、「スキーマレス」データとも呼ばれ得る。したがって、ストレージの観点から言えば、スキーマレスデータから生じた複数のレコードのテーブルをどのように編成するかは必ずしも容易に明らかにはならない。少なくとも部分的に非構造化のデータの動的および非固定の性質に起因して、この非構造化データは、クエリシステムおよび基礎ストレージシステムについての問題の原因となってきた。例えば固定スキーマがない場合、取り込みプロセスは、少なくとも部分的な非構造化データを、クエリ処理にとって効率的なやり方でテーブルに列指向化するのは困難な場合がある。
【0012】
この問題を複雑にするのは、クライアントまたはユーザが、非構造化データの部分に対して特定のスキーマを指定したくない場合があることである。例えば、クライアントは、クエリ処理および/またはデータストレージの観点から意味のあるスキーマを生成する自分の能力に自信を持っていない場合がある。さらに、またはあるいは、ユーザデータは、ユーザのために自動的に生成されたデータ(例えば、機械生成データ)に対応する場合がある。一例として、ユーザは、クラウドコンピューティング環境を使用する場合があり、クラウドコンピューティング環境は、ログファイルを生成することによってユーザのデータ(またはリソース)の状態を報告し得る。この状況において、ユーザに、この形態のユーザデータ(例えば、ユーザデータログファイル)のためのスキーマを生成させることは、ユーザにとって負担となる場合があり、またはユーザの能力を超える場合がある。換言すれば、ユーザは、どの関連スキーマがそれらのタイプのファイルについて指定されるべきかを知らない場合がある。したがって、これらのシナリオにおいて、クエリシステムおよび/またはストレージシステムはユーザに依存しない手法を必要とする。
【0013】
さらに、非構造化または半構造化データは、特定の非構造化データ形式が作成しやすいため普及度が高まっている。これは、データが非構造化形態の何らかの部分で自動的に生成されることが容易であるときに(例えば、自動生成ログファイル)、機械生成コンテクストにおいて特に当てはまる。1つのそのような普及しているデータ形式は、JavaScript Object Notation(JSON)である。JSONデータは、データ交換形式として機能する場合が多く、ますます一般的となっているスキーマレスファイル形式である。JSONは部分的には言語独立型であり、これはJSONがすべてのプログラミング言語と互換性があることを意味するため普及している。加えて、JSONは、テキストベースで軽量の形式であり、これによってユーザが生成するか、機械が生成するかにかかわらず、容易に生成可能である。JSONデータは、何らかの形態のテキスト構造およびキー値または属性値表記を有するが、その構造はレコード間で固定されていない。JSONデータは、一貫した構造を欠いているため、JSONデータに効率的にクエリすることは、クエリ処理がクエリプラン作成またはクエリ検証において正式なスキーマを使用できないため部分的に難しい。
【0014】
特にJSONを使用する場合、JSONデータのためにクエリ処理を行ういくつかの手法がある。一手法では、いくつかのシステムが、JSONファイルの全体を文字列として解釈する。これはJSONファイルのデータを保存できるが、クエリシステムの効率性(例えば、クエリ速度)の多くが固定構造またはスキーマに関することであるため、クエリシステムについての問題を提示する。換言すれば、データエントリと関連付けられた固定スキーマによって、クエリシステムは効率的なクエリプランを作成可能になる。クエリプラン作成およびクエリ実行のための一部の効率性は、データエントリの全体がクエリ処理中に読み出される必要がないことである。しかしながら、ストレージシステムが文字列としてJSONファイルを記憶する場合、JSONファイルの特定のエントリもしくはレコードについてのクエリは、概してクエリ処理がエントリの一部分だけではなく文字列全体を扱うことを強制する。すなわち、クエリ処理は、概して、クエリへの応答のための関連部分を識別するために文字列全体を読み出す必要がある。この意味では、JSONデータに対する文字列ベースのストレージ手法は、クエリシステムについてあまり理想的でないとされてきた。
【0015】
少なくともいずれかの部分が非構造化(例えば、非構造化または半構造化データ)である場合にデータが原因となる上記の問題のいくつかに対処するために、本明細書で説明する手法は、スキーマをデータから抽出することによって、そのようなデータ(例えば、非構造化または半構造化データ)の効率的なストレージおよび/または取り出しを促進する。この手法は以下で概して半構造化データに関して言及されるが、詳述される手法は、全体的(例えば、非構造化データ)もしくは部分的にスキーマレスである任意のデータについて使用され得る。スキーマを半構造化データから抽出することによって、この手法もまた、半構造化データのためのスキーマ生成中にユーザに依存することを回避する。ここで、ストレージおよびクエリの目的で、取り込み中の動作は半構造化データを処理し、列指向形式に細分化して、半構造化データからスキーマを抽出する。抽出されたスキーマに基づいて、半構造化データがストレージシステムに記憶されると、クエリが半構造化データの一部分のみを要求した場合に、抽出されたスキーマによって、クエリ処理が要求された部分でのみ発生して、クエリ結果(クエリ応答とも呼ばれる)を生成する。例えば、クエリが行エントリの特定の列における半構造化データの一部分を要求する場合、クエリ処理は抽出されたスキーマを使用して、半構造化データ全体(またはそれよりも大きい部分)を読み出すのではなく、その特定の列における値のみを読み出す。
【0016】
この抽出手法はまた、半構造化および構造化データの両方が取り込みプロセス中にストレージシステムによって取り込まれ得るというさらなる利点を提供し得る。換言すれば、取り込み中に、ストレージシステムは、構造化および半構造化データの両方を含む行ごとのユーザデータの単一のブラブを取り込む。両方の形態のデータを処理できることは、2つの異なる取り込みプロセス(すなわち一方は構造化データ用プロセス、もう一方は半構造化データ用プロセス)を開始する必要がないため、ユーザにとって有益であり得る。例えば、構造化データを有するレコードは、ストレージシステムが構造化データと同じテーブルにデータの非構造化部分を記憶できるように半構造化であるフィールドを有することができる。この点において、クエリ結果は、構造化データおよび半構造化データの両方からのデータを含む応答を返すことができ、それによってクエリプロセスが異なるデータ構造にわたってより堅牢であることが可能である。
【0017】
図1は、データ管理環境100の一例を示す図である。ユーザ10と関連付けられたユーザデバイス110は、そのコンピューティングリソース112(例えば、データ処理ハードウェア114および/またはメモリハードウェア116)の実行中にユーザデータ12を生成する。例えば、ユーザ10は、ユーザデバイス110のデータ処理ハードウェア114上で動作しているアプリケーションを使用してユーザデータ12を生成する。様々なアプリケーションがユーザデータ12を生成する能力を有するため、ユーザ10は、ユーザデータのストレージおよび/またはユーザデータの管理のために他のシステム(例えば、リモートシステム130、ストレージシステム140、またはクエリシステム150)を利用することが多い。
【0018】
いくつかの例では、ユーザデバイス110は、1つまたは複数のリモートシステム130と(例えば、ネットワーク120を介して)通信する能力を有するそれ自体のコンピューティングリソース112を使用するローカルデバイス(例えば、ユーザ10の位置と関連付けられている)である。追加的または代替的に、ユーザデバイス110は、リモートリソース(例えば、リモートコンピューティングリソース132)へのそのアクセスを活用して、ユーザ10のためのアプリケーションを動作させる。ユーザデバイス110の使用を通して生成されたユーザデータ12は、最初にローカル(例えば、メモリハードウェア116のデータストレージ118)に記憶され、次いで、作成時にリモートシステム130に伝送され、もしくはネットワーク120を通してリモートシステム130に送信され得る。例えば、ユーザデバイス110は、リモートシステム130を使用してユーザデータ12をストレージシステム140に伝送する。
【0019】
いくつかの例では、ユーザ10は、リモートシステム130(例えば、クラウドコンピューティング環境)のコンピューティングリソース132を、ユーザデータ12のストレージのために利用する。これらの例では、リモートシステム130は、様々なユーザアプリケーション(例えば、ストリーミングデータ)によって生成されているときにユーザデータ12を受信し得る。ここで、(例えば、ユーザデータ12の)データストリームは、ストレージおよび/またはさらなる処理のためのリモートシステム130に到着したデータの連続的または概して連続的なフィードを指す。いくつかの構成では、ユーザデータ12をリモートシステム130に連続的にストリーミングする代わりに、ユーザ10および/またはリモートシステム130は、処理のためにユーザデータ12をバッチで(例えば、間隔周波数で)送信されるように構成する。ユーザデバイス110と非常に似ているが、リモートシステム130は、リモートデータ処理ハードウェア134(例えば、サーバおよび/またはCPU)およびメモリハードウェア136(例えば、ディスク、データベース、もしくは他の形態のデータストレージ)などのコンピューティングリソース132を含む。
【0020】
いくつかの構成では、リモートコンピューティングリソース132は、リモートシステム130と関連付けられている、および/またはリモートシステム130と通信している様々なシステムによって利用されるリソースである。
図1に示すように、これらのシステムは、ストレージシステム140および/またはクエリシステム150を含み得る。いくつかの例では、これらのシステム140、150の機能性は、異なる順列で互いに一体化され得る(例えば、互いの上に構築され得る)か、または互いに通信する能力を有する別個のシステムであり得る。例えば、ストレージシステム140およびクエリシステム150は、組み合わされて(例えば、
図1のシステムを囲む破線で示されるような)単一のシステムとされてもよい。コンピューティングリソース132を伴うリモートシステム130は、それらのシステム140、150の1つまたは複数の機能をホストするように構成され得る。いくつかの実施態様では、リモートシステム130は、コンピューティングリソース132がネットワーク120を介してアクセス可能な1つまたは複数の場所にわたって分散されている分散システムである。
【0021】
いくつかの例では、ストレージシステム140は、ユーザ10(または複数のユーザ)のためのデータ記憶手段として、データウェアハウス142(例えば、データストアおよび/または複数のデータベース)を動作させるように構成されている。概して言えば、データウェアハウス142は、1つまたは複数のソースからのデータを記憶し、かつそのソースからのデータを解析、報告、および/または統合するように設計され得る。データウェアハウス142によって、ユーザ(例えば、組織ユーザ)は、中央ストレージデポジトリおよびストレージデータアクセスポイントを有することができる。ユーザデータ12をデータウェアハウス142などの中央デポジトリに包含することによって、データウェアハウス142は、データ解析および/またはデータ報告(例えば、クエリシステム150および/または解析システムによる)などの機能のデータ取得を単純化し得る。さらに、データウェアハウス142は、ユーザ10(例えば、組織ユーザ)がデータ傾向を理解するために大量の履歴データを記憶できるように、著しい量のデータを記憶するように構成され得る。データウェアハウス142がユーザのデータ12のための主要または唯一のデータストレージデポジトリであり得る場合、ストレージシステム140は大量のデータ(例えば、ギガバイト/秒、テラバイト/秒、またはそれ以上)を、ユーザ10と関連付けられているユーザデバイス110から受信することが多い場合がある。追加的または代替的に、ストレージシステム140として、ストレージシステム140および/またはストレージウェアハウス142は、単一のデータソースからの複数のユーザ(例えば、ある組織の複数の被雇用者)のために、および/または同時複数ユーザアクセスのためのデータセキュリティ(例えば、データ冗長性)のために構成され得る。いくつかの構成では、データウェアハウス142は、デフォルトでデータが新しい着信データによって上書きされない、または消去されないように持続性および/または非一時的である。
【0022】
クエリシステム150は、クエリ160の形態でストレージシステム140から情報またはデータを要求するように構成されている。いくつかの例では、クエリ160は、ストレージシステム140内のユーザデータ12に対する要求(例えば、データエクスポート要求)としてユーザ10によって開始される。例えば、ユーザ10は、クエリシステム150(例えば、クエリシステム150と関連付けられているインターフェース)と対話して、ストレージシステム140のデータウェアハウス142に記憶されているユーザデータ12を取り出す。ここで、クエリ160は、ユーザ発信(すなわちユーザ10によって直接要求される)またはシステム発信(すなわちクエリシステム150自体によって構成される)でもよい。いくつかの例では、クエリシステム150は、ユーザ10がストレージシステム140に記憶されたユーザデータ12の解析または監視を行うことを可能にするルーチンまたは繰り返しのクエリ160(例えば、何らかの指定された周波数で)を構成する。
【0023】
クエリ160の形式は様々であり得るが、概してストレージシステム140に記憶されている特定のユーザデータ12への参照を含む。ここで、クエリシステム150はストレージシステム140が特定のスキーマにしたがってユーザデータ12を記憶するように、かつクエリシステム150が特定のスキーマに関する情報に基づいてクエリ160を生成し得るように、ストレージシステム140と連動して動作する。例えば、データストレージシステム140は、ユーザデータ12を、ユーザデータ12がテーブルの行および列に入力されているテーブル形式で記憶する。テーブル形式の場合、テーブル内のユーザデータ12は、ユーザデータ12と関連付けられているスキーマに対応する行および列を有する。例えば、ユーザデータ12は、ユーザ10によって作成された注文書を指し得る。この例では、ユーザデータ12を記憶している1つまたは複数のテーブルは、購入部品、部品の費用、購入部品の製造業者、および製造業者に関する詳細(例えば、製造業者住所および/または製造業者の会社識別子)のための列を含み得る。ここで、各行はレコードもしくはエントリ(例えば、注文書)に対応し、テーブルの列における行エントリと関連付けられている各列値がスキーマの特定の部分に対応する。ストレージシステム140が特定のスキーマ(例えば、スキーママネージャ200によって示されたスキーマ)にしたがってユーザデータ12を受信し得るため、ストレージシステム140は、ユーザデータ12と関連付けられているその形式の要素(例えば、関係、見出し、もしくは他のスキーマ)(例えば、ユーザデータ12に対してさらなる文脈または定義を提供する)にクエリシステム150がアクセス可能なように、ユーザデータ12を記憶するように構成される。
【0024】
クエリ160に応答して、クエリシステム150は、クエリ160の要求(例えば、特定のユーザデータ12を求める要求)を満たす、もしくは満たすことを試みるクエリ応答162を生成する。概して言えば、クエリ応答162は、クエリシステム150がクエリ160において要求するユーザデータ12を含む。クエリシステム150は、クエリ160を発信したエンティティ(例えば、ユーザ10)またはクエリシステム150と通信する別のエンティティまたはシステムに対してこのクエリ応答162を返し得る。例えば、クエリ160自体もしくはクエリシステム150は、クエリシステム150が解析システムなど、ユーザ10と関連付けられているシステムに1つまたは複数のクエリ応答162を伝送することを指定し得る。例えば、ユーザ10は、解析システムを使用して、ユーザデータ12に対して解析を行う。多くの場合、クエリシステム150は、解析システムがその解析を(例えば、特定の頻度で)行うことが可能なように、ストレージシステム140内のユーザデータ12に関するルーチンクエリ160を生成するようにセットアップされる。例えば、クエリシステム150は、解析システムが解析および/または表現する過去7日間のユーザログデータを引き出す日毎クエリ160を実行する。
【0025】
いくつかの実施態様では、クエリシステム150がクエリ160のための入力を受信すると、クエリシステム150は、クエリ160を実行するためにクエリプラン152を決定するように構成される。換言すれば、クエリ160は、ストレージシステム140におけるテーブルの実際の構造への特定の参照なく概して基本レベルのテーブルを参照する場合が多い。例えば、クエリ160は、単純に言えば、過去6か月にわたる製造業者Sprocket Labsについての購入データをエクスポートするために、ストレージシステム140におけるユーザデータ12のテーブルにクエリする。クエリ160の入力形式は、ストレージシステム140におけるユーザデータ12のより複雑なテーブルおよび/またはストレージ構造から抜粋するためのユーザインターフェースとして使用の容易さのために単純化される。したがって、クエリ160を実行または書き込んだユーザ10は、実際のストレージ構造を知る必要はなく、むしろクエリ160を生成するためには、上位レベルにおけるテーブル構造のスキーマまたはフィールドのみを知っていればよい。クエリシステム150は、ストレージシステム140との組み合わせにおいて、ユーザ10からのクエリ160を分解して、クエリ160をユーザデータ12に関する潜在的な演算子(例えば、read/write演算)を識別する形式に書き換えて、ユーザデータ12の基礎構造に関するクエリ160を行う。すなわち、クエリシステム150がクエリ160を受信すると、クエリ160を取り込み、ストレージシステム140の実際の構造に対してそのクエリ160をどのように実行するかを計画する。このプラン作成は、テーブルのサブセット(例えば、パーティション)および/またはクエリ160に対応するテーブルについてのファイルの識別を必要とし得る。
【0026】
図1および
図2A~
図2Hを参照すると、データ管理環境100はまた、スキーママネージャ200(マネージャ200とも呼ばれる)を含む。マネージャ200は、ユーザデータ取り込み中のスキーマ抽出を管理するように構成されている。ここで、スキーマ抽出は、取り込みおよびストレージ(例えば、ストレージシステム140による)中に半構造化ユーザデータ12、12Uについてのスキーマを生成するプロセスを指す。スキーマ抽出は、概して、取り込み中に発生するが、より大きいシステムの構成上の必要性に応じて、前処理工程として取り込み前に発生し得る。マネージャ200は、構造化ユーザデータ12、12Sとは対照的に、半構造化ユーザデータ12Uは固定スキーマを含まないため、スキーマ抽出を行う。固定スキーマがない場合、マネージャ200は代わりに、半構造化ユーザデータ12Uについてのスキーマを抽出し、これによってユーザデータ12(例えば、構造化データ12Sおよび半構造化データ12Uの両方)が細分化されて、ストレージシステム140に記憶可能になる。マネージャ200によるスキーマ抽出は、ユーザデータ12が実際にストレージシステム140にロードされているとき(例えば、取り込み中に)発生し、それによってマネージャ200は、どのようにユーザデータ12がストレージシステム140の1つまたは複数のテーブル204に記憶されるかを指定する。マネージャ200は、ユーザ10のためのシステム140、150に関連した動作(例えば、ストレージ動作および/またはクエリ動作)を実行および/または調整することによって半構造化ユーザデータ12Uのためのスキーマを抽出し得る。例えば、マネージャ200は、(例えば、下位レベルのストレージコンポーネントになるために)取り込み中に処理および符号化されているため、「進行中」の半構造化ユーザデータ12Uを解析する。この点に関して、半構造化データをどのように、どこに記憶/符号化するかを決定するときに、半構造化データの特性(例えば、データパスおよび/またはデータ型)がマネージャ200によって考慮される。すなわち、マネージャ200は、必ずしも、取り込み前の前処理工程として半構造化データ12Uのためのスキーマを確立してそのスキーマを適用せず、むしろ、取り込みが発生したときに半構造化データ12Uのためのスキーマを解釈する。例えば、これは、明確なスキーマが常に存在しない場合があることを意味する。
【0027】
マネージャ200の機能性は、集中していてもよく(例えば、システム140、150の一方に存在してもよい)、またはその設計に応じてシステム140、150にわたって分散されていてもよい。
図1などのいくつかの例では、マネージャ200は、ユーザ10からユーザデータ12を受信することと、ストレージシステム140におけるストレージ動作を容易にすることとを行うように構成されている。例えば、マネージャ200は、ユーザ10によるデータロード要求を容易にする。ユーザ10によるロード要求に応答してマネージャ200は、そのユーザデータ12を取り込み、さらに構造化データ12Sと関連付けられているスキーマおよび/または半構造化データ12Uと関連付けられている抽出されたスキーマ202に基づいて、ユーザデータ12をクエリに適した形式に変換し得る。ここで、取り込みは、ユーザデータ12を取得すること、および/またはストレージシステム140(例えば、データウェアハウス142)にインポートすることを指し、それによってシステムが、取り込まれたユーザデータ12を(例えば、クエリシステム150)によって使用可能になる。概して言えば、データは、データがソース(例えば、ユーザ10またはユーザ10のユーザデバイス110)から発信されたときマネージャ200がそのデータをインポートするリアルタイムでの取込み、またはマネージャ200が周期的な時間間隔で離散的なデータチャンクをインポートするバッチでの取込みが可能である。
【0028】
半構造化データ12Uからスキーマを抽出するために、マネージャ200は、半構造化データ12Uを含むユーザデータ12をユーザ10から受信する。例えば、
図1は、ユーザ10が何らかの数であるN個のファイルをマネージャ200に伝送し、それらのファイルがクエリ効率的な形式でストレージシステム140に記憶されることを図示する。ここで、第1のファイルAは、構造化データ12、12Sを含み、一方、第2のファイルBは、半構造化データ12U(例えば、JSONデータ)を含む。ユーザデータ12が非構造化データ12Uを含むとき、ユーザ10は、概して、ユーザデータ12が半構造化データ12Uを含むといういくつかのインジケーション14をマネージャ200に提供する。このインジケーション14は、マネージャ200に対して、半構造化データ12Uが固定スキーマ(例えば、構造化データ12Sのスキーマなど)を含んでいないということを示す。いくつかの実施態様では、ユーザデータ12が構造化データ12Sおよび半構造化データ12Uの両方を含む混合データであるとき、インジケーション14は、加えて、半構造化データ12Uが開始する箇所および/または終了する箇所を識別し得る。ユーザ10は、ユーザインターフェースを使用して、マネージャ200およびストレージシステム140へのユーザデータ12の伝送と連携して動作する。ここで、ユーザインターフェースは、指定された(もしくは選択された)ときに、ユーザデータ12が半構造化データ12Uを含むことを示すフィールドもしくは何らかのグラフィックコンポーネントを含み得る。いくつかの例では、マネージャ200は、受信したユーザデータ12の何らかの部分が半構造化データ12Uであることを検出できる。すなわち、マネージャ200は、ユーザデータ12の少なくとも一部の形式が半構造化データ12Uに対応することを判定し得る。例えば、マネージャ200は、ユーザデータ12がJSONデータを含むことを認識し、JSONデータが一般的な非構造化メッセージ/ファイル形式であることを把握している。ユーザデータ12が半構造化データ12Uを含むというインジケーション14に基づいて、マネージャ200は、ユーザデータ12の取り込み中に半構造化データ12Uについての抽出されたスキーマ202を生成する。
【0029】
図2A~
図2Hを参照すると、マネージャ200は、半構造化データ12Uのための抽出されたスキーマ202を生成することと、抽出されたスキーマ202にしたがった半構造化データ12Uのストレージを容易にすることとを行うように構成されている。半構造化データ12Uが固定スキーマを含んでいないというインジケーション14をマネージャ200が受信すると、マネージャ200は、半構造化データ12Uを複数のデータパス210、210a~210nにパースする。
図2Aを参照すると、半構造化データ12Uは、単一のトランザクションレコードを有するJSONペイロードに対応する。JSONデータなどの半構造化データ12Uが単一のメッセージまたはファイルにおいていくつかのレコードを含むことができるが、
図2Aは、説明を容易にするために単一のレコードを図示している。
【0030】
JSONペイロードのテキストに基づいて、マネージャ200は、半構造化データ12Uの5つのデータパス210、210a~210eを識別する。いくつかの例では、半構造化データ12UがJSONデータである場合、各データパス210は、半構造化データ12U内のキー値もしくはキー属性構造の表現に対応する。例えば、第1のデータパス210aでは、キーはテキスト「component」であり、値212はテキスト「sprocket」である。同様に、第2のデータパス210bは、テキスト「cost」に対応するキーおよび数「23」に対応する値212を有する。
図2Aはまた、JSONデータなどの半構造化データ12Uをパースしている間に、マネージャ200がネストされた値もしくは属性を有するキーに遭遇し得ることを示す。ここで、マネージャ200は、各々のネストされたキー値ペアを別個のデータパス210として識別し得る。例えば、JSONペイロードのテキストにしたがって、「manufacturer」は、「name」、「location」、および「company_id」の3つの属性を含む。第1の属性「manufacturer.name」は、マネージャ200に、第3のデータパス210cを生成させる。第2の属性「manufacturer.location」は、マネージャ200に、第4データパス210dを生成させ、第3の属性「manufacturer.company_id」は、マネージャ200に、第5のデータパス210eを生成させる。この例では、これらのパス210の各々は、各特定のデータパスラインに接続された値212によって示されるように、特定の値212と関連付けられている。
【0031】
図2B~
図2Gを参照すると、いくつかの実施態様では、マネージャ200がデータパス210の各々を使用して、抽出されたスキーマ202を生成する。例えば、それぞれのデータパス210の各キーは、個別の列スキーマ202になり、列は、そのキーに対応する値212を記憶する。すなわち、マネージャ200が個別の列スキーマ202を指定すると、マネージャ200は、その列スキーマ202に対応する半構造化データ12U内レコードから値212を記憶することによって半構造化データ12Uの取り込みを行う。したがって、行エントリ(例えば、Record 1)と関連付けられている列値は、列スキーマ202を形成するために抽出されたデータパス210の値212に対応する。ここで、この手法によりデータパス210の値212を列指向ストレージに記憶することは、特に、記憶圧縮技術(例えば、ランレングス符号化)もしくは同様のデータ型に関して他の親和性のあるデータ記憶技術と組み合わされたときに、結果的としてストレージ効率性が得られる。
【0032】
いくつかの例では、マネージャ200は、パースされたテキストのデータ型220をさらに考慮することによって、抽出されたスキーマ202を生成する。ここで、半構造化データ12Uがレコード間でデータ型220を動的に変化させる場合があるため、マネージャ200は、データ型220を考慮する。スキーマ202を構築する際に上記の変化を考慮するために、マネージャ200は、半構造化データ12Uに含まれるデータ型を識別し得る。例えば、マネージャ200は、特定のデータパス210と関連付けられているデータ型220を判定する。データ型220はまた、あるデータパス210が別のデータパス210とは異なる時、または異なるようになった時を示し得る。すなわち、例えば、第1のデータパス210と関連付けられている第1の値212のデータ型220は、第1のデータパス210と関連付けられている第2の値212のデータ型220と(例えば、第1のレコードと第2のレコードとの間)比較すると変化している場合がある。このデータ型220の変化に起因して、マネージャ200は、第2の値212とは異なる列スキーマ202を有する異なる列に第1の値212を記憶し得る。この手法を用いることにより、マネージャ200は、レコード間で発生するデータ型変化が半構造化データ12Uのためのクエリ効率的なストレージを妥協しないことを確実にでき得る。例えば、第1のレコードが文字列である製造名を含み、第2のレコードが整数である製造名を含む場合、製造名に対応する値212を要求するクエリ160は、結果として、文字列および整数の両方を含み得る応答162が得られる。ここで、ユーザ10は、文字列および整数の両方を有するクエリ応答162を受信する場合があり、どのようにその整数が製造名に対するクエリ160の有効な結果であるかを理解しない場合がある。この状況は、半構造化データ12Uの性質に起因して実現可能であるため、マネージャ200は、抽出されたスキーマ202に対する追加の制約に寄与するデータ型220を抽出し得る。例えば、抽出されたスキーマ202に対する追加の制約は、特定のデータ型220に特化した最小/最大統計でもよい。換言すれば、文字列は、整数(すなわち数)からの異なる最小/最大統計を有し得る。したがって、これらの追加の制約または統計は、読み出し動作中のデータの一部分を切り捨てる(例えば、ファイル粒度において)ために使用され得る。いくつかの例では、マネージャ200のこの機能性によって、値212が対応するデータ型220にかかわらず、ユーザ10が自身の取り込まれたデータをそのまま読み出すことができるように、列もしくはデータパス210がデータ型220(例えば、文字列および整数)の混合であり得るように、ユーザ10は、データパス210においてあらゆる種類の乱雑データを有することを可能にする。
【0033】
図2B~
図2Gは、どのようにマネージャ200が、半構造化データ12Uからの値212を、抽出されたスキーマ202によって制約を受けた個別の列に細分化もしくは列指向化するかを図示する例である。ここで、
図2C~
図2Gにより詳細に示すように、抽出されたスキーマ202はまた、データ型220に基づいて、どの値212がどの列に記憶され得るかを制約する。
図2Cでは、「component」に対応する第1のデータパス210aが、文字列である第1のデータ型220、220aを有する第1の列スキーマ202、202aになる。それに応じて、マネージャ200は、文字列である第1のレコードからの第1の値212a「sprocket」および文字列である第2のレコードからの第2の値212b「wheel」を、第1の列スキーマ202aを有する列にエントリとして記憶する。
図2Dでは、「cost」に対応する第2のデータパス210bが、整数およびfloatである第2のデータ型220、220bを有する第2の列スキーマ202、202bになる。ここで、マネージャ200は、両方が整数(例えば、「23」)またはfloat(例えば、「700.23」)のいずれかである、第3の値212c「23」および第4の値212d「700.23」を第2の列スキーマ202bを有する列にエントリとして記憶する。
図2Eでは、「manufacturer.name」に対応する第3のデータパス210cが、文字列である第3のデータ型220、220cを有する第3の列スキーマ202、202cになる。この例では、マネージャ200は、両方が文字列である第5の値212e「Sprocket Labs」および第6の値212f「Roundabout」を、第3の列スキーマ202cを有する列にエントリとして記憶する。
図2Fでは、「manufacturer.location.address」に対応する第4のデータパス210dが、配列である第4のデータ型220、220dを有する第4の列スキーマ202、202dになる。ここで、マネージャ200は、第4の列スキーマ202dによって指定されたような製造業者の住所を識別する各レコードからの配列に対応する値222h~222mを記憶する。この列は、その親の長さにおいて値212が何回繰り返されるかの配列長さを含む。例えば、len={3,3}は、第1の「address」が3つの値を有し、第2の「address」もまた3つの値を有することを指定する。
図2Gでは、「manufacturer.company_id」に対応する第5のデータパス210eが、整数である第5のデータ型220eを有する第5の列スキーマ202、202eになる。この例では、マネージャ200は、両方が整数である第14の値212n「91724」および第15の値212o「83724」を、第5の列スキーマ202eを有する列にエントリとして記憶する。
【0034】
いくつかの例では、マネージャ200は、値212をシリアル化するように構成され得る。シリアル化は、一般に、値212を所与の表現(例えば、文字列表現)に変換するプロセス、または値212を所与の表現から変換するプロセス(例えば、デシリアル化と呼ばれる場合もある)を指す。したがって、シリアル化されたデータ(例えば、結果として得られるビット列)は、シリアル化形式の文脈において再度読み出されるとき、シリアル化されたデータは、その元のシリアル化前の形態に再構成され得る。ここで、マネージャ200は、広範囲にわたったシリアル化形式(例えば、JSONデータに特化した形式を含む)と互換性があるように構成され得る。一例として、データパス210が、第1の行(例えば、第1のレコード)に対する整数のデータ型220および別の行(例えば、第2のレコード)における文字列のデータ型220を有する場合、マネージャ200は、それらの値220の一方または両方をシリアル化し得る。値212をシリアル化することによって、マネージャ200は、記憶された値212の一貫したクエリ処理を促進し得る。
【0035】
図2Fはまた、マネージャ200は、半構造化データ12Uをストレージシステム140に記憶するときに半構造化データ12Uから潜在的に重要な情報を保存できることを示す。例えば、マネージャ200は、値212がexplicit null(例えば、値212g)である行エントリを含む。例えば、explicit nullは、JSON nullを指す。すなわち、マネージャ200は、nullのための特定のプレースホルダを有し、さらにエントリ値212がnullであることを明言する。一方、いくつかのストレージ技術は、explicit nullを記憶しない、またはストレージ目的のexplicit nullを無視する場合がある。さらに、explicit nullを無視または除去することは、null値を有するキーが意味のある情報の場合に下流の問題を引き起こし得る。いくつかの用途では、値が欠落している(すなわち、存在する場合もあるが、未知である)のではなく、値が存在しない(すなわちnull)ことを知ることは意味がある場合がある。例えば、JSONデータの場合、JSONオブジェクト内のJSONキーの存在は、有意性を有し、したがって、そのnull値を保存することが重要である。explicit null値212と類似して、マネージャ200はまた、列のそれぞれの列値212が空の配列を含む(すなわち、配列がその値のための形式であるが、その配列に対して現在提示されている値がないことを示す)ように、半構造化データ12Uを記憶し得る。
【0036】
図2Hは、ストレージシステム140のテーブル204が単一の大きいテーブル204であり得、各列が抽出されたスキーマ202に対応し、各行がユーザデータ12の1つまたは複数のファイル/メッセージからのレコードであることを図示している。換言すれば、
図2A~
図2Gの各テーブル204は、互いに統合されて、
図2Hに示すテーブル204を形成し得る。代替的に、
図2Hに示すような大きいテーブル204は、クエリ160への回答が、クエリ処理が大きいテーブルを評価する必要がなく、むしろ、大きいテーブルよりも効率的に確かめられ得る小さいテーブルを評価すればよいように、小さいテーブル204(例えば、列指向スライス)に分割され得る。
【0037】
抽出されたスキーマ手法の場合、ユーザデータ12がクエリ実行時間中にクエリ処理実行可能になるように、マネージャ200は、取り込み中に、半構造化データ12Uを同様にして構造化データ12Sに細分化できる。半構造化データ12Uおよび構造化データ12Sを同様にして細分化および記憶することによって、ユーザデータ12は、構造にかかわらず、共に記憶可能であり(例えば、同じテーブル204に記憶可能)、ならびに、状況によっては、共同でクエリ160を満たすことができる。さらに、マネージャ200がユーザデータ12を列指向化することによって、マネージャ200は、半構造化データ12Uが構造化データ12Sに対する同様のクエリおよびストレージ効率性を有し得ることを確実にする。例えば、テーブルストレージスキームは、クエリ処理中の列指向処理を可能にし、クエリプラン152は、クエリ160を満たすために必要な量よりも多くのデータを読み出す必要がない。すなわち、クエリ処理は、抽出されたスキーマ202を使用して、クエリ自体とより近接して整列するデータレベルにおいてクエリ応答162をフィルタリングまたは算出し得る。例えば、クエリシステム150は、抽出されたスキーマ202を使用してユーザデータ12に対する動作をプッシュダウンして、クエリ処理中に発生する読み出し動作および/または書き込み動作の量を低減する。
【0038】
図3は、半構造化データ12Uを記憶する方法300のための動作の例示的な構成のフローチャートである。動作302で、方法300は、クエリシステム150のユーザ10からユーザデータ12を受信し、ここで、ユーザデータ12は半構造化ユーザデータ12Uを含む。動作304で、方法300はまた、半構造化ユーザデータ12Uが固定スキーマを含まないというインジケーション14を受信する。半構造化ユーザデータ12Uが固定スキーマを含まないというインジケーション14に応答して、方法300は、2つのサブ動作306、306a~306bを伴う動作306を行う。サブ動作306aで、方法300は、半構造化ユーザデータ12Uを複数のデータパス210にパースする。サブ動作306bで、方法300は、複数のデータパス210の各それぞれのデータパス210と関連付けられているデータ型220を抽出する。動作308で、方法300は、クエリシステム150と通信するデータベースのテーブル204に行エントリとして半構造化ユーザデータ12Uを記憶し、その行エントリと関連付けられている各列値212は、複数のデータパス210およびそれぞれのデータパス210と関連付けられているデータ型220のそれぞれと対応する。
【0039】
図4は、本文書に説明されるシステム(例えば、リモートシステム130、ストレージシステム140、クエリシステム150、および/またはマネージャ200)ならびに方法(例えば、方法300)を実施するために使用され得る、例示的コンピューティングデバイス400の概略図である。コンピューティングデバイス400は、ラップトップ、デスクトップ、ワークステーション、携帯情報端末、サーバ、ブレードサーバ、メインフレーム、および他の適切なコンピュータなどの様々な形態のデジタルコンピュータを表すことを意図している。ここに示されるコンポーネント、それらの接続および関係、ならびにそれらの機能は、例示的にすぎないように意図されており、本文書に説明および/または請求される発明の実施態様を限定するように意図されていない。
【0040】
コンピューティングデバイス400は、プロセッサ410(例えば、データ処理ハードウェア)と、メモリ420(例えば、メモリハードウェア)と、記憶デバイス430と、メモリ420および高速拡張ポート450に接続する高速インターフェース/コントローラ440と、低速バス470および記憶デバイス430に接続する低速インターフェース/コントローラ460とを含む。コンポーネント410、420、430、440、450、および460はそれぞれ、様々なバスを使用して相互接続され、共通マザーボード上に、または適宜、他の様式で、搭載されてもよい。プロセッサ410は、高速インターフェース440に結合されるディスプレイ480などの外部入出力デバイス上のグラフィカルユーザインターフェース(GUI)のためのグラフィカル情報を表示するようにメモリ420内または記憶デバイス430上に記憶された命令を含む、コンピューティングデバイス400内で実行するための命令を処理することができる。他の実施態様では、複数のプロセッサおよび/または複数のバスが、適宜、複数のメモリおよびタイプのメモリとともに使用されてもよい。また、複数のコンピューティングデバイス400が接続されてもよく、各デバイスは、(例えば、サーババンク、ブレードサーバのグループ、またはマルチプロセッサシステムとして)必要な動作の部分を提供する。
【0041】
メモリ420は、コンピューティングデバイス400内に情報を非一時的に記憶する。メモリ420は、コンピュータ可読媒体、揮発性メモリユニット、または不揮発性メモリユニットであってもよい。非一時的メモリ420は、コンピューティングデバイス400による使用のために、一時的または恒久的基準でプログラム(例えば、命令のシーケンス)もしくはデータ(例えば、プログラム状態情報)を記憶するために使用される、物理的デバイスであってもよい。不揮発性メモリの例は、限定されないが、フラッシュメモリおよび読み出し専用メモリ(ROM)/プログラマブル読み出し専用メモリ(PROM)/消去可能プログラマブル読み出し専用メモリ(EPROM)/電子的消去可能プログラマブル読み出し専用メモリ(EEPROM)(例えば、典型的には、ブートプログラムなどのファームウェアに使用される)を含む。揮発性メモリの例は、限定されないが、ランダムアクセスメモリ(RAM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、相変化メモリ(PCM)、ならびにディスクまたはテープを含む。
【0042】
記憶デバイス430は、コンピューティングデバイス400のための大容量記憶装置を提供することが可能である。いくつかの実施態様では、記憶デバイス430は、コンピュータ可読媒体である。様々な異なる実施態様では、記憶デバイス430は、フロッピー(登録商標)ディスクデバイス、ハードディスクデバイス、光ディスクデバイス、またはテープデバイス、フラッシュメモリもしくは他の類似ソリッドステートメモリデバイス、またはストレージエリアネットワーク内のデバイスもしくは他の構成を含む、数々のデバイスであってもよい。追加の実施態様では、コンピュータプログラム製品は、情報担体で有形に具現化される。コンピュータプログラム製品は、実行されると、上記で説明されるものなどの1つまたは複数の方法を行う、命令を含有する。情報担体は、メモリ420、記憶デバイス430、またはメモリオンプロセッサ410などのコンピュータもしくは機械可読媒体である。
【0043】
高速コントローラ440が、コンピューティングデバイス400のための帯域幅集約的動作を管理する一方で、低速コントローラ460は、より低い帯域幅集約的動作を管理する。そのような任務の配分は、例示的にすぎない。いくつかの実施態様では、高速コントローラ440は、メモリ420、ディスプレイ480(例えば、グラフィックスプロセッサまたはアクセラレータを通して)、および様々な拡張カード(図示せず)を受け入れ得る高速拡張ポート450に結合される。いくつかの実施態様では、低速コントローラ460は、記憶デバイス430および低速拡張ポート470に結合される。様々な通信ポート(例えば、USB、Bluetooth(登録商標)、Ethernet(登録商標)、無線Ethernet)を含み得る、低速拡張ポート470は、キーボード、ポインティングデバイス、スキャナ、または例えば、ネットワークアダプタを通した、スイッチもしくはルータなどのネットワーキングデバイスなどの1つまたは複数の入出力デバイスに結合されてもよい。
【0044】
コンピューティングデバイス400は、図に示されるように、いくつかの異なる形態で実施されてもよい。例えば、これは、標準サーバ400aとして、またはそのようなサーバ400aのグループで複数回、ラップトップコンピュータ400bとして、もしくはラックサーバシステム400cの一部として、実施されてもよい。
【0045】
本明細書に説明されるシステムおよび技法の様々な実施態様は、デジタル電子および/もしくは光学回路、集積回路、特別に設計されたASIC(特定用途向け集積回路)、コンピュータハードウェア、ファームウェア、ソフトウェア、ならびに/またはそれらの組み合わせで実現されることができる。これらの様々な実施態様は、ストレージシステム、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスからデータおよび命令を受信し、そこにデータおよび命令を伝送するように結合される、特定または汎用用途であり得る、少なくとも1つのプログラマブルプロセッサを含む、プログラマブルシステム上で実行可能および/または解釈可能である1つまたは複数のコンピュータプログラムにおける実施を含むことができる。
【0046】
これらのコンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーションまたはコードとしても公知である)は、プログラマブルプロセッサのための機械命令を含み、高レベルプロシージャおよび/もしくはオブジェクト指向プログラミング言語で、ならびに/またはアセンブリ/機械言語で実施されることができる。本明細書に使用されるように、用語「機械可読媒体」および「コンピュータ可読媒体」は、機械可読信号としての機械命令を受信する機械可読媒体を含む、機械命令および/もしくはデータをプログラマブルプロセッサに提供するために使用される、任意のコンピュータプログラム製品、非一時的コンピュータ可読媒体、装置、ならびに/またはデバイス(例えば、磁気ディスク、光ディスク、メモリ、プログラマブル論理デバイス(PLD))を指す。用語「機械可読信号」は、機械命令および/またはデータをプログラマブルプロセッサに提供するために使用される、任意の信号を指す。
【0047】
本明細書に説明されるプロセスおよび論理フローは、入力データに動作し、出力を生成することによって、機能を行うように1つまたは複数のコンピュータプログラムを実行する、1つまたは複数のプログラマブルプロセッサによって行うことができる。プロセスおよび論理フローはまた、特定用途論理回路、例えば、FPGA(フィールドプログラマブルゲートアレイ)、またはASIC(特定用途向け集積回路)によって行うことができる。コンピュータプログラムの実行のために好適なプロセッサは、一例として、汎用および特定用途マイクロプロセッサの両方、ならびに任意の種類のデジタルコンピュータのいずれか1つまたは複数のプロセッサを含む。概して、プロセッサは、読み出し専用メモリまたはランダムアクセスメモリもしくは両方から、命令およびデータを受信する。コンピュータの不可欠な要素は、命令を行うためのプロセッサ、ならびに命令およびデータを記憶するための1つまたは複数のメモリデバイスである。概して、コンピュータはまた、データを記憶するための1つまたは複数の大容量記憶デバイス、例えば、磁気、光磁気ディスク、または光学ディスクからデータを受信する、もしくはそこにデータを転送する、または両方を行うように、動作可能に結合されるであろう。しかしながら、コンピュータは、そのようなデバイスを有する必要はない。コンピュータプログラム命令およびデータを記憶するために好適なコンピュータ可読媒体は、一例として、半導体メモリデバイス、例えば、EPROM、EEPROM、およびフラッシュメモリデバイス、磁気ディスク、例えば、内部ハードディスクまたはリムーバルディスク、光磁気ディスク、ならびにCD ROMおよびDVD-ROMディスクを含む、すべての形態の不揮発性メモリ、媒体、およびメモリデバイスを含む。プロセッサおよびメモリは、特定用途論理回路によって補完される、またはそれに組み込まれることができる。
【0048】
ユーザとの相互作用を提供するために、本開示の1つまたは複数の態様は、情報をユーザに対して表示するための表示デバイス、例えば、CRT(陰極線管)、LCD(液晶ディスプレイ)モニタ、またはタッチスクリーンと、随意に、それによってユーザが入力をコンピュータに提供することができる、キーボードおよびポインティングデバイス、例えば、マウスまたはトラックボールとを有するコンピュータ上に実施されることができる。他の種類のデバイスも、ユーザとの相互作用を提供するために使用されることができ、例えば、ユーザに提供されるフィードバックは、任意の形態の感覚フィードバック、例えば、視覚フィードバック、聴覚フィードバック、または触覚フィードバックであることができ、ユーザからの入力は、音響、発話、または触覚入力を含む、任意の形態で受信されることができる。加えて、コンピュータは、ユーザによって使用されるデバイスに文書を送信し、そこから文書を受信することによって、例えば、ウェブブラウザから受信される要求に応答して、ユーザのクライアントデバイス上のウェブブラウザにウェブページを送信することによって、ユーザと相互作用することができる。
【0049】
いくつかの実施態様を説明した。それでもなお、本開示の精神および範囲から逸脱することなく、様々な修正が行われ得ることが理解されるであろう。したがって、他の実施態様も、以下の請求項の範囲内である。
【手続補正書】
【提出日】2024-01-19
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
コンピュータが実行する方法であって、データ処理ハードウェアによって実行されると、
半構造化ユーザデータを含むユーザデータを、クエリシステムのユーザから受信することと、
前記半構造化ユーザデータが固定スキーマを含まないというインジケーションを受信することと、
前記半構造化ユーザデータが前記固定スキーマを含まないという前記インジケーションに応答して、
前記半構造化ユーザデータを複数のデータパスにパースすることと、
前記複数のデータパスの各それぞれのデータパスと関連付けられているデータ型を抽出することと、
前記クエリシステムと通信するデータベースのテーブルに行エントリとして前記半構造化ユーザデータを記憶することと、を含む動作を前記データ処理ハードウェアに行わせ、
前記行エントリと関連付けられている各列値は、前記複数のデータパスおよびそれぞれの前記データパスと関連付けられている前記データ型のそれぞれと対応する、方法。
【請求項2】
前記ユーザデータは、それぞれの固定スキーマを有する構造化ユーザデータをさらに含み、
前記データベースの前記テーブルは、前記構造化ユーザデータに対応する1つまたは複数の行エントリを含む、請求項1に記載の方法。
【請求項3】
前記半構造化ユーザデータは、JavaScript Object Notation(JSON)を含む、請求項1または請求項2に記載の方法。
【請求項4】
前記行エントリと関連付けられているそれぞれの列は、explicit null値を含む、請求項3に記載の方法。
【請求項5】
前記行エントリと関連付けられているそれぞれの列のそれぞれの列値は、空の配列を含む、請求項3に記載の方法。
【請求項6】
前記データベースの前記テーブルにおける前記行エントリとして前記半構造化ユーザデータを記憶することは、
前記半構造化ユーザデータからパースされた前記複数のデータパスのうちの第1のデータパスと関連付けられている第1のデータ型および第2のデータ型を識別することと、
前記第1のデータパスの前記第1のデータ型に対応する前記半構造化ユーザデータの第1の値を、前記テーブルの第1の列の第1の行エントリに記憶することと、
前記第1のデータパスの前記第2のデータ型に対応する前記半構造化ユーザデータの第2の値を、前記テーブルの前記第1の列の第2の行エントリに記憶することとをさらに含み、
前記第2のデータ型は、前記第1のデータ型とは異なるデータ型である、請求項1または請求項2に記載の方法。
【請求項7】
前記動作は、クエリ実行時間中に、
前記クエリシステムの前記ユーザから、記憶されている前記半構造化ユーザデータと関連付けられているデータに対するクエリを受信することと、
前記クエリに応答して、記憶されている前記半構造化ユーザデータのそれぞれのデータパスを決定することと、
前記クエリに応答して、記憶されている前記半構造化ユーザデータの前記それぞれのデータパスに対応する前記行エントリのそれぞれの列値を含むクエリ応答を生成することとをさらに含む、請求項1または請求項2に記載の方法。
【請求項8】
前記ユーザデータは、前記ユーザと関連付けられているクラウドコンピューティングリソースについてのログデータに対応する、請求項1または請求項2に記載の方法。
【請求項9】
前記複数のデータパスの各データパスは、前記半構造化ユーザデータのキー値ペアのためのキーに対応する、請求項1または請求項2に記載の方法。
【請求項10】
前記行エントリのそれぞれの列値は、ネストされた配列を含む、請求項1または請求項2に記載の方法。
【請求項11】
データ処理ハードウェアと、
前記データ処理ハードウェアと通信するメモリハードウェアとを含み、前記メモリハードウェアは、前記データ処理ハードウェア上で実行されると、
半構造化ユーザデータを含むユーザデータを、クエリシステムのユーザから受信することと、
前記半構造化ユーザデータが固定スキーマを含まないというインジケーションを受信することと、
前記半構造化ユーザデータが前記固定スキーマを含まないという前記インジケーションに応答して、
前記半構造化ユーザデータを複数のデータパスにパースすることと、
前記複数のデータパスの各それぞれのデータパスと関連付けられているデータ型を抽出することと、
前記クエリシステムと通信するデータベースのテーブルに行エントリとして前記半構造化ユーザデータを記憶することと、を含む動作を前記データ処理ハードウェアに行わせる命令を記憶し、
前記行エントリと関連付けられている各列値は、前記複数のデータパスおよびそれぞれの前記データパスと関連付けられている前記データ型のそれぞれと対応する、システム。
【請求項12】
前記ユーザデータは、それぞれの固定スキーマを有する構造化ユーザデータをさらに含み、
前記データベースの前記テーブルは、前記構造化ユーザデータに対応する1つまたは複数の行エントリを含む、請求項11に記載のシステム。
【請求項13】
前記半構造化ユーザデータは、JavaScript Object Notation(JSON)を含む、請求項11または請求項12に記載のシステム。
【請求項14】
前記行エントリと関連付けられているそれぞれの列は、explicit null値を含む、請求項13に記載のシステム。
【請求項15】
前記行エントリと関連付けられているそれぞれの列のそれぞれの列値は、空の配列を含む、請求項13に記載のシステム。
【請求項16】
前記データベースの前記テーブルにおける前記行エントリとして前記半構造化ユーザデータを記憶することは、
前記半構造化ユーザデータからパースされた前記複数のデータパスのうちの第1のデータパスと関連付けられている第1のデータ型および第2のデータ型を識別することと、
前記第1のデータパスの前記第1のデータ型に対応する前記半構造化ユーザデータの第1の値を、前記テーブルの第1の列の第1の行エントリに記憶することと、
前記第1のデータパスの前記第2のデータ型に対応する前記半構造化ユーザデータの第2の値を、前記テーブルの前記第1の列の第2の行エントリに記憶することとをさらに含み、
前記第2のデータ型は、前記第1のデータ型とは異なるデータ型である、請求項11または請求項12に記載のシステム。
【請求項17】
前記動作は、クエリ実行時間中に、
前記クエリシステムの前記ユーザから、記憶されている前記半構造化ユーザデータと関連付けられているデータに対するクエリを受信することと、
前記クエリに応答して、記憶されている前記半構造化ユーザデータのそれぞれのデータパスを決定することと、
前記クエリに応答して、記憶されている前記半構造化ユーザデータの前記それぞれのデータパスに対応する前記行エントリのそれぞれの列値を含むクエリ応答を生成することとをさらに含む、請求項11または請求項12に記載のシステム。
【請求項18】
前記ユーザデータは、前記ユーザと関連付けられているクラウドコンピューティングリソースについてのログデータに対応する、請求項11または請求項12に記載のシステム。
【請求項19】
前記複数のデータパスの各データパスは、前記半構造化ユーザデータのキー値ペアのためのキーに対応する、請求項11または請求項12に記載のシステム。
【請求項20】
前記行エントリのそれぞれの列値は、ネストされた配列を含む、請求項11または請求項12に記載のシステム。
【国際調査報告】