CData Sync App は、Couchbase データをデータベース、データレイク、またはデータウェアハウスに継続的にパイプライン化する簡単な方法を提供し、分析、レポート、AI、および機械学習で簡単に利用できるようにします。
Couchbase コネクタはCData Sync アプリケーションから使用可能で、Couchbase からデータを取得して、サポートされている任意の同期先に移動できます。
The CData Sync App models Couchbase documents in a bucket as tables in a relational database; connect to Couchbase Server versions 4.0 and up, Enterprise Edition or Community Edition.
必須プロパティについては、設定タブを参照してください。
通常必須ではない接続プロパティについては、高度な設定タブを参照してください。
To connect to data, set the Server property to the hostname or IP address of the Couchbase server(s) you are authenticating to.
If your Couchbase server is configured to use SSL, you can enable it either by using an https URL for Server (like https://couchbase.server), or by setting the UseSSL property to True.
By default, the Sync App connects to the N1QL Query service. In order to connect to the Couchbase Analytics service, you will also need to set the CouchbaseService property to Analytics.
Set the following to connect to Couchbase Cloud:
The Sync App supports several forms of authentication. Couchbase Cloud only accepts Standard authentication, while Couchbase Server accepts Standard authentication, client certificates, and credentials files.
To authenticate with standard authentication, set the following:
The Sync App supports authenticating with client certificates when SSL is enabled. To use client certificate authentication, set the following properties:
You can also authenticate using using a credentials file containing multiple logins. This is included for legacy use and is not recommended when connecting to a Couchbase Server that supports role-based authentication.
Sync App は、スキーマおよびインデックスを決定するための異なるモードを提供します。以下に、いくつかの設定例を示します。
テーブルを検索してカラムを検出するすべてのクエリを無効にします。スキーマファイルで定義されたテーブルのみが報告されます。TypeDetectionScheme は無視されます。 ドライバーは、Location ディレクトリにあるスキーマファイルのみを使用します。スキーマファイルなしでこのオプションを使用すると、利用可能なテーブルがなくなります。
SELECT `bucket`, `scope`, name FROM system:keyspaces
ドライバーは利用可能なバケットを検出しますが、その中で子テーブルを探すことはしません。 これは、スキーマ検出の時間を削減したい場合、またはバケットにプライマリインデックスがない場合にお勧めします。
SELECT `travel-sample`.* FROM `travel-sample` LIMIT 100
ドライバーは利用可能なバケットを検出し、それらの各バケットの内側を見て子テーブルを探します。これにより、ネストされたデータにアクセスする最も柔軟な方法が提供されますが、サーバー上の各バケットにプライマリインデックスがあることが必要です。
ドライバーはフレーバー検出やカラムタイプの検出は行いません。カラムは常にVARCHAR として報告されます。子テーブルは、TableSupport の設定に応じてスキャンされます。
ドライバーは、バケットからドキュメントのサンプルを読み出し、データ型を決定します。フレーバー検出は行いません。
NQ1QL INFER ステートメントを使用して存在するテーブルとカラムを判断します。これはDocType よりも柔軟なフレーバー検出を行いますが、Couchbase Enterprise でのみ利用可能です。
SELECT META(`travel-sample`).id AS `Document.Id`, `travel-sample`.* FROM `travel-sample`
各バケットをチェックして、ドキュメント内の"docType" フィールドのさまざまな値を探すことでテーブルを検出します。 例えば、バケットbeer-sample に"docType" = 'brewery' および"docType" = 'beer' のドキュメントが含まれている場合、beer-sample、beer-sample.brewery、beer-sample.beer の3つのテーブルが生成されます。 RowScan と同様に、各フレーバーのドキュメントのサンプルをスキャンし、各フィールドのデータ型を決定します。
Couchbase はスキーマフリーなドキュメントデータベースで、高いパフォーマンス、使用性、およびスケーラビリティを提供します。これらの機能は、必ずしもSQL-92 のような標準準拠のクエリ言語と互換しないわけではありません。
Sync Appでは、スキーマフリーなCouchbase オブジェクトをリレーショナルテーブルにモデル化し、SQL クエリをN1QL またはSQL++ (Analytics) クエリに読み替えることで、要求されたデータを取得します。このセクションでは、Sync App が複数のやり方によって、リレーショナルSQL とドキュメントデータベースのギャップの橋渡しをいかに行うかを説明します。
Sync App が最初にCouchbase に接続すると、各バケットを開きそのバケットから設定可能な数の行をスキャンします。それらの行を使用して、そのバケット内のカラムとデータ型、およびそれらのドキュメント内の任意の配列に対するフレーバーテーブルと子テーブルの作成方法を決定します。Couchbase Enterprise バージョン4.5.1以降では、TypeDetectionScheme がINFER に設定されている場合は、Sync App はINFER コマンドを使用するように設定することもできます。これにより、Sync App はバケットのより正確なカラムリストを取得し、より複雑なフレーバーを検出することができます。
Analytics サービスを使用する場合、Sync App はカラムと子テーブルの検出のみを行います。フレーバーテーブルは、シャドウデータセットを使用してCouchbase 自体によって提供されます。また、Analytics モードは現在INFER をサポートしていないため、行スキャンのみがサポートされています。
詳しくは、自動スキーマ検出 を参照して、フレーバーテーブルと子テーブルがCouchbase データからどのようにモデル化されるかをご確認ください。 Setting NumericStrings is also recommended as it can avoid type detection issues with certain kinds of text data.
オプションとして、カスタムスキーマ定義 を使って、Couchbase オブジェクトの上に選択されたリレーショナル構造を投射することもできます。これにより、自分で選択したカラム名、データ型、Couchbase ドキュメント内の値の位置を定義することができます。
さまざまなN1QL およびSQL++ 処理がどのようにSQL として表されているかについての詳細はクエリマッピング を参照してください。
配列とオブジェクトがどのようにフィールドにマップされるかについての詳細は、垂直フラット化 を参照してください。
生のJSON 文字列からデータを抽出する方法についての詳細は、JSON 関数 を参照してください。
バケット内のドキュメントに配列を含むフィールドが含まれる場合、Sync App はそれらのフィールドをメインテーブルのJSON 集計として公開するだけでなく、独自のテーブルとして公開します。これらの子テーブルの構造は、配列にオブジェクトまたはプリミティブ値が含まれるかどうかによって異なります。
配列に数値や文字列などのプリミティブな値が含まれる場合、子テーブルには2つのカラムしかありません。配列を含むドキュメントの主キーである"Document.Id" と、配列内の値を含む"value" です。例えば、"Games" というバケットにこれらのドキュメントが含まれる場合:
/* Primary key "1" */ { "scores": [1,2,3] } /* Primary key "2" */ { "scores": [4,5,6] }
Sync App は、これらの行を含む"Games_scores" という名前のテーブルをビルドします:
Document.Id | value |
1 | 1 |
1 | 2 |
1 | 3 |
2 | 4 |
2 | 5 |
2 | 6 |
配列にオブジェクトが含まれる場合、子テーブルには、そのオブジェクト内にある各フィールドのカラムと、その配列を含むドキュメントの主キーを含む"Document.Id" カラムがあります。例えば、"Games" というバケットにこれらのドキュメントが含まれる場合:
/* Primary key "1" */ { "moves": [ {"piece": "pawn", "square": "c3"}, {"piece": "rook", "square": "d5"} ] } /* Primary key "2" */ { "moves": [ {"piece": "knight", "square": "f1"}, {"piece": "bishop", "square": "e4"} ] }
Sync App は、これらの行を含む"Games_moves" という名前のテーブルをビルドします:
Document.Id | piece | square |
1 | pawn | c3 |
1 | rook | d5 |
2 | knight | f1 |
2 | biship | e4 |
Note that the above data model is not fully relational, which has important limitations for use-cases that involve complex JOINs or DML operations on child tables. The NewChildJoinsMode connection property exposes an alternative data model which avoids these limitations. Please refer to its page in the connection property section of the documentation for more details.
Sync App は、TypeDetectionScheme がInfer またはDocType に設定され、CouchbaseService がN1QL に設定されている限り、同じバケット内に複数の種類のドキュメントが存在する場合も検出できます。これらの異なる種類のドキュメントは、適切な行のみを含む独自のテーブルとして公開されています。
例えば、"Games" というバケットには、"type" の値が "chess" または"football" のいずれかであるドキュメントが含まれています:
/* Primary key "1" */ { "type": "chess", "result": "stalemate" } /* Primary key "2" */ { "type": "chess", "result": "black win" } /* Primary key "3" */ { "type": "football", "score": 23 } /* Primary key "4" */ { "type": "football", "score": 18 }
Sync App はこのバケット用に3テーブル作成します。1つは、すべてのドキュメントを含む"Games" と呼ばれるバケットです:
Document.Id | result | score | type |
1 | stalemate | NULL | chess |
2 | black win | NULL | chess |
3 | NULL | 23 | football |
4 | NULL | 18 | football |
1つは、type が"chess" であるドキュメントのみを含む"Games.chess" と呼ばれるものです。
Document.Id | result | type |
1 | stalemate | chess |
2 | black win | chess |
1つは、type が"football" であるドキュメントのみを含む"Games.football" と呼ばれるものです。
Document.Id | score | type |
3 | 23 | football |
4 | 18 | football |
Sync App は、そのフレーバーのドキュメントで定義されていないフレーバーテーブルのカラムを含みません。例えば、"result" と"score" の両カラムが基本テーブルに含まれていても、"Games.chess" には"result" だけ、"Games.football" には"score" だけが含まれます。
/* Primary key "1" */ { "type": "chess", "results": ["stalemate", "white win"] } /* Primary key "2" */ { "type": "chess", "results": ["black win", "stalemate"] } /* Primary key "3" */ { "type": "football", "scores": [23, 12] } /* Primary key "4" */ { "type": "football", "scores": [18, 36] }Sync App はこれらのテーブルを生成します。
テーブル名 | 子フィールド | フレーバーコンディション |
Games | ||
Games_results | results | |
Games_scores | scores | |
Games.chess | "type" = "chess" | |
Games.chess_results | results | "type" = "chess" |
Games.football | "type" = "football" | |
Games.football_scores | scores | "type" = "football" |
Sync App では、SQL-92 準拠クエリを対応するN1QL またはSQL++ クエリにマッピングします。以下のマッピングは完全ではありませんが、この変換中にSync App が使用する一般的なパターンを理解するのに役立つはずです。
SELECT ステートメントは、以下のように、適切なN1QL SELECT クエリに変換されます:SQL-92 とN1QL の類似により、多くのクエリは直接変換されます。
Sync App にCouchbase バケットのスキーマが存在する場合の一つの大きな相違は、SELECT * クエリはバケット内の一つのフィールドを直接SELECT するものに変換されることです。Sync App はまた、自動的にバケット内のそれぞれのドキュメントのプライマリーキーをベースにDocument.Id カラムを自動的に作成します。
SQL Query | N1QL Query |
SELECT * FROM users | SELECT META(`users`).id AS `id`, ... FROM `users` |
SELECT [Document.Id], status FROM users | SELECT META(`users`).id AS `Document.Id`, `users`.`status` FROM `users` |
SELECT * FROM users WHERE status = 'A' OR age = 50 | SELECT META(`users`).id AS `id`, ... FROM `users` WHERE TOSTRING(`users`.`status`) = "A" OR TONUMBER(`users`.`age`) = 50 |
SELECT * FROM users WHERE name LIKE 'A%' | SELECT META(`users`).id AS `id`, ... FROM `users` WHERE TOSTRING(`users`.`name`) LIKE "A%" |
SELECT * FROM users WHERE status = 'A' ORDER BY [Document.Id] DESC | SELECT META(`users`).id AS `id`, ... FROM `users` WHERE TOSTRING(`users`.`status`) = "A" ORDER BY META(`users`).id DESC |
SELECT * FROM users WHERE status IN ('A', 'B') | SELECT META(`users`).id, ... FROM `users` WHERE TOSTRING(`users`.`status`) IN ["A", "B"] |
Sync App が型変換が必要であることを検出した場合、条件に追加の型関数が含まれることがあることに注意してください。 StrictComparison プロパティを使用して、これらの型変換を無効にできます。明確にするために、残りのN1QL サンプルはこれらの追加の変換関数なしで示されています。
When a query has either equals or IN clause that targets the Document.Id column, and there is no OR clause to override it, the Sync App will convert the Document.Id filter into a USE KEYS clause. This avoids the overhead of scanning an index because the document keys are already known to the N1QL engine (this optimization does not apply to the Analytics CouchbaseService).
SQL Query | N1QL Query |
SELECT * FROM users WHERE [Document.Id] = '1' | SELECT ... FROM `users` USE KEYS ["1"] |
SELECT * FROM users WHERE [Document.Id] IN ('2', '3') | SELECT ... FROM `users` USE KEYS ["2", "3"] |
SELECT * FROM users WHERE [Document.Id] = '4' OR [Document.Id] = '5' | SELECT ... FROM `users` USE KEYS ["4", "5"] |
SELECT * FROM users WHERE [Document.Id] = '6' AND status = 'A' | SELECT ... FROM `users` USE KEYS ["6"] WHERE `status` = "A" |
In addition to being used for SELECT queries, the same optimization is performed for DML operations as shown below.
クエリ内のすべての子テーブルが同じ親を共有し、それらの"Document.Id" カラムでINNER JOIN を使用して結合されている限り、Sync App はJOIN を単一のUNNEST 式に結合します。N1QL のUNNEST クエリとは異なり、フィールドにアクセスする場合は、基本テーブルに明示的にJOIN する必要があります。
SQL クエリ | N1QL クエリ |
SELECT * FROM users_posts | SELECT META(`users`).id, `users_posts`.`text`, ... FROM `users` UNNEST `users`.`posts` AS `users_posts` |
SELECT * FROM users INNER JOIN users_posts ON users.[Document.Id] = users_posts.[Document.Id] | SELECT META(`users`).id, `users`.`name`, ..., `users_posts`.`text`, ... FROM `users` UNNEST `users`.`posts` AS `users_posts` |
SELECT * FROM users INNER JOIN users_posts ... INNER JOIN users_comments ON ... | SELECT ... FROM `users` UNNEST `users`.`posts` AS `users_posts` UNNEST `users`.`comments` AS `users_comments` |
フレーバーテーブルには、クエリ時に常に適切な条件が含まれているため、フレーバーからのドキュメントのみが返されます。
SQL クエリ | N1QL クエリ |
SELECT * FROM [users.subscriber] | SELECT ... FROM `users` WHERE `docType` = "subscriber" |
SELECT * FROM [users.subscriber] WHERE age > 50 | SELECT ... FROM `users` WHERE `docType` = "subscriber" AND `age` > 50 |
N1QL はいくつかのビルトイン集計関数を持ちます。Sync App は、さまざまな集計クエリの拡張的利用を行います。以下にいくつか例を示します。
SQL クエリ | N1QL クエリ |
SELECT Count(*) As Count FROM Orders | SELECT Count(*) AS `count` FROM `Orders` |
SELECT Sum(price) As total FROM Orders | SELECT Sum(`price`) As `total` FROM `Orders` |
SELECT cust_id, Sum(price) As total FROM Orders GROUP BY cust_id ORDER BY total | SELECT `cust_id`, Sum(`price`) As `total` FROM `Orders` GROUP BY `cust_id` ORDER BY `total` |
SELECT cust_id, ord_date, Sum(price) As total FROM Orders GROUP BY cust_id, ord_date Having total > 250 | SELECT `cust_id`, `ord_date`, Sum(`price`) As `total` FROM `Orders` GROUP BY `cust_id`, `ord_date` Having `total` > 250 |
SQL のINSERT ステートメントは、次のようにN1QL INSERT ステートメントとしてマッピングされます。これは、トップレベルのフィールドと垂直フラット化 によって生成されたフィールドの両方で同じように機能します。
SQL クエリ | N1QL クエリ |
INSERT INTO users ([Document.Id], age, status) VALUES ('bcd001', 45, 'A') | INSERT INTO `users` (KEY, VALUE) VALUES ('bcd001', { "age" : 45, "status" : "A" }) |
INSERT INTO users ([Document.Id], [metrics.posts]) VALUES ('bcd002', 0) | INSERT INTO `users` (KEY, VALUE) VALUES ('bcd002', {"metrics': {"posts": 0}}) |
子テーブルへの挿入は、配列処理を使用して内部的にN1QL のUPDATE に変換されます。これはトップレベルドキュメントを作成しないので、提供されるDocument.Id は既存のドキュメントを参照する必要があります。
子テーブルINSERT のもう1つの制限は、multi-valued INSERT がすべて同じDocument.Id を使用しなければならないことです。プロバイダーはデータを変更する前にこれを確認し、この成約に違反しているとエラーを発生させます。
SQL クエリ | N1QL クエリ |
INSERT INTO users_ratings ([Document.Id], value) VALUES ('bcd001', 4.8), ('bcd001', 3.2) | UPDATE `users` USE KEYS "bcd001" SET `ratings` = ARRAY_PUT(`ratings`, 4.8, 3.2) |
INSERT INTO users_reviews ([Document.Id], score) VALUES ('bcd002', 'Great'), ('bcd002', 'Lacking') | UPDATE `users` USE KEYS "bcd001" SET `ratings` = ARRAY_PUT(`ratings`, {"score": "Great"}, {"score": "Lacking"}) |
一括INSERT もサポートされています。SQL Bulk INSERT は以下のように変換されます。
INSERT INTO users#TEMP ([Document.Id], KEY, VALUE) VALUES ('bcd001', 45, "A") INSERT INTO users#TEMP ([Document.Id], KEY, VALUE) VALUES ('bcd002', 24, "B") INSERT INTO users SELECT * FROM users#TEMP変換される文字列:
INSERT INTO `users` (KEY, VALUE) VALUES ('bcd001', {"age": 45, "status": "A"}), ('bcd002', {"age": 24, "status": "B"})
子テーブルのmulti-valued INSERT のように、一括INSERT のすべての行も同じDocument.Id を持つ必要があります。
SQL のUPDATE ステートメントは、次のようにN1QL UPDATE ステートメントとしてマッピングされます:
SQL クエリ | N1QL クエリ |
UPDATE users SET status = 'C' WHERE [Document.Id] = 'bcd001' | UPDATE `users` USE KEYS ["bcd001"] SET `status` = "C" |
UPDATE users SET status = 'C' WHERE age > 45 | UPDATE `users` SET `status` = "C" WHERE `age` > 45 |
子テーブルを更新するとき、SQL クエリは"FOR" 式または"ARRAY" 式のいずれかを使用してUPDATE クエリに変換されます。
SQL クエリ | N1QL クエリ |
UPDATE users_ratings SET value = 5.0 WHERE value > 5.0 | UPDATE `users` SET `ratings` = ARRAY CASE WHEN `value` > 5.0 THEN 5 ELSE `value` END FOR `value` IN `ratings` END |
UPDATE users_reviews SET score = 'Unknown' WHERE score = '' | UPDATE `users` SET `$child`.`score` = 'Unknown' FOR `$child` IN `reviews` WHEN `$child`.`score` = "" END |
SQL クエリ | N1QL クエリ |
UPDATE [users.subscriber] SET status = 'C' WHERE age > 45 | UPDATE `users` SET `status` = "C" WHERE `docType` = "subscriber" AND `age` > 45 |
SQL のDELETE ステートメントは、次のようにN1QL UPDATE ステートメントとしてマッピングされます:
SQL クエリ | N1QL クエリ |
DELETE FROM users WHERE [Document.Id] = 'bcd001' | DELETE FROM `users` USE KEYS ["bcd001"] |
DELETE FROM users WHERE status = 'inactive' | DELETE FROM `users` WHERE `status` = "inactive" |
子テーブルから削除するとき、SQL クエリは"ARRAY" 式を使用してUPDATE クエリに変換されます。
SQL クエリ | N1QL クエリ |
DELETE FROM users_ratings WHERE value < 0 | UPDATE `users` SET `ratings` = ARRAY `value` FOR `value` IN `ratings` WHEN NOT (`value` < 0) END |
DELETE FROM users_reviews WHERE score = '' | UPDATE `users` SET `reviews` = ARRAY `$child` FOR `$child` IN `reviews` WHEN NOT (`$child`.`score` = "") END |
SQL クエリ | N1QL クエリ |
DELETE FROM [users.subscriber] WHERE status = 'inactive' | DELETE FROM `users` WHERE `docType` = "subscriber" AND status = "inactive" |
/* Primary key "1" */ { "address" : { "building" : "1007", "coord" : [-73.856077, 40.848447], "street" : "Morris Park Ave", "zipcode" : "10462" }, "borough" : "Bronx", "cuisine" : "Bakery", "grades" : [{ "date" : "2014-03-03T00:00:00Z", "grade" : "A", "score" : 2 }, { "date" : "2013-09-11T00:00:00Z", "grade" : "A", "score" : 6 }, { "date" : "2013-01-24T00:00:00Z", "grade" : "A", "score" : 10 }, { "date" : "2011-11-23T00:00:00Z", "grade" : "A", "score" : 9 }, { "date" : "2011-03-10T00:00:00Z", "grade" : "B", "score" : 14 }], "name" : "Morris Park Bake Shop", "restaurant_id" : "30075445" }
SELECT [address.building], [address.street] FROM restaurantsこの結果セットを返します:
address.building | addres.street |
1007 | Morris Park Ave |
SELECT [address.coord.0], [address.coord.1] FROM restaurantsこの結果セットを返します:
address.coord.0 | address.coord.1 |
-73.856077 | 40.838447 |
配列のフラット化は、常に2つの項目を含む"address.coord" のように、配列項目の数が事前にわかっている場合にのみ使用してください。任意の数の項目を含むことができる"grades" のような配列の場合は、配列内のすべての値を読み取ることができるため代わりに自動スキーマ検出 に記載されている子テーブルの使用を検討してください。
User-defined functions are a new feature provided by Couchbase 7 and up. They can be used with the Sync App like normal functions but with a special naming convention for using scoped functions. Normally the Sync App requires that functions already exist before they are used, to define them refer to the Couchbase documentation on CREATE FUNCTION queries. These may be run at the Couchbase console or with the Sync App in QueryPassthrough mode.
Couchbase has support for both scalar functions as well as functions that return results from subqueries. The Sync App supports scalar functions within its SQL dialect but subquery functions can only be used when QueryPassthrough is enabled. The rest of this section covers the Sync App's SQL dialect and assums that QueryPassthrough is disabled.
In both N1QL and Analytics mode, global user-defined functions can be accessed using either their simple names or their qualified names.
The simple name is just the name of the function:
SELECT ageInYears(birthdate) FROM users
Global functions may also be invoked by qualifying them with the default namespace.
Qualified names are quoted names that contain internal separators, which by default is a period though this can be changed using the DataverseSeparator property.
In both N1QL and Analytics the global namespace is called Default:
SELECT [Default.ageInYears](birthdate) FROM users
Calling global functions using simple names is recommended. While the default qualfier is supported, its only intended use is for when a UDF clashes with a standard SQL function that the Sync App would otherwise translate.
Both N1QL and Analytics also allow functions to be defined outside of a global context.
In Analytics functions can be attached to both dataverses and scopes which are called using two-part and three-part names respectively.
In N1QL functions may only be attached to scopes so only three-part names may be used.
/* N1QL AND Analytics */ SELECT [socialNetwork.accounts.ageInYears](birthdate) FROM [socialNetwork.accounts.users] /* Analytics only */ SELECT [socailNetwork.ageInYears](birthdate) FROM [socialNetwork.accounts.users]
The Sync App can return JSON structures as column values. The Sync App enables you to use standard SQL functions to work with these JSON structures. The examples in this section use the following array:
[ { "grade": "A", "score": 2 }, { "grade": "A", "score": 6 }, { "grade": "A", "score": 10 }, { "grade": "A", "score": 9 }, { "grade": "B", "score": 14 } ]
SELECT Name, JSON_EXTRACT(grades,'[0].grade') AS Grade, JSON_EXTRACT(grades,'[0].score') AS Score FROM Students;
Column Name | Example Value |
Grade | A |
Score | 2 |
SELECT Name, JSON_COUNT(grades,'[x]') AS NumberOfGrades FROM Students;
Column Name | Example Value |
NumberOfGrades | 5 |
SELECT Name, JSON_SUM(score,'[x].score') AS TotalScore FROM Students;
Column Name | Example Value |
TotalScore | 41 |
SELECT Name, JSON_MIN(score,'[x].score') AS LowestScore FROM Students;
Column Name | Example Value |
LowestScore | 2 |
SELECT Name, JSON_MAX(score,'[x].score') AS HighestScore FROM Students;
Column Name | Example Value |
HighestScore | 14 |
SELECT [Document.Id], grade, score, DOCUMENT(*) FROM gradesFor example, that query would return:
Document.Id | grade | score | DOCUMENT |
1 | A | 6 | {"document.id":1,"grade":"A","score":6} |
2 | A | 10 | {"document.id":1,"grade":"A","score":10} |
3 | A | 9 | {"document.id":1,"grade":"A","score":9} |
4 | B | 14 | {"document.id":1,"grade":"B","score":14} |
SELECT DOCUMENT(*) FROM gradesThis query would return:
DOCUMENT | |
{"grades":{"grade":"A","score":6"}} | |
{"grades":{"grade":"A","score":10"}} | |
{"grades":{"grade":"A","score":9"}} | |
{"grades":{"grade":"B","score":14"}} |
自動スキーマ検出 に加え、Sync App ではCouchbase オブジェクトのスキーマを統計的に定義することができます。 スキーマは、容易に拡張できるテキストベースのコンフィギュレーションファイルで定義されます。CreateSchema ストアドプロシージャを呼び出してスキーマファイルを生成できます。詳しくは、自動スキーマ検出 を参照してください。
Location プロパティをスキーマファイルを格納するファイルディレクトリに設定します。次のセクションでは、結果のスキーマを拡張する方法や自分で記述する方法について説明します。
次のドキュメントを考え、ネストプロパティを独自のカラムとして取得してみましょう:
/* Primary key "1" */ { "id": 12, "name": "Lohia Manufacturers Inc.", "homeaddress": {"street": "Main "Street", "city": "Chapel Hill", "state": "NC"}, "workaddress": {"street": "10th "Street", "city": "Chapel Hill", "state": "NC"} "offices": ["Chapel Hill", "London", "New York"] "annual_revenue": 35600000 } /* Primary key "2" */ { "id": 15, "name": "Piago Industries", "homeaddress": {street": "Main Street", "city": "San Francisco", "state": "CA"}, "workaddress": {street": "10th Street", "city": "San Francisco", "state": "CA"} "offices": ["Durham", "San Francisco"] "annual_revenue": 42600000 }
<rsb:info title="Customers" description="Customers" other:dataverse="" other:bucket=customers"" other:flavorexpr="" other:flavorvalue="" other:isarray="false" other:pathspec="" other:childpath="">
<attr name="document.id" xs:type="string" key="true" other:iskey="true" other:pathspec="" />
<attr name="annual_revenue" xs:type="integer" other:iskey="false" other:pathspec="" other:field="annual_revenue" />
<attr name="homeaddress.city" xs:type="string" other:iskey="false" other:pathspec="{" other:field="homeaddress.city" />
<attr name="homeaddress.state" xs:type="string" other:iskey="false" other:pathspec="{" other:field="homeaddress.state" />
<attr name="homeaddress.street" xs:type="string" other:iskey="false" other:pathspec="{" other:field="homeaddress.street" />
<attr name="name" xs:type="string" other:iskey="false" other:pathspec="" other:field="name" />
<attr name="id" xs:type="integer" other:iskey="false" other:pathspec="" other:field="id" />
<attr name="offices" xs:type="string" other:iskey="false" other:pathspec="" other:field="offices" />
<attr name="offices.0" xs:type="string" other:iskey="false" other:pathspec="[" other:field="offices.0" />
<attr name="offices.1" xs:type="string" other:iskey="false" other:pathspec="[" other:field="offices.1" />
<attr name="workaddress.city" xs:type="string" other:iskey="false" other:pathspec="{" other:field="workaddress.city" />
<attr name="workaddress.state" xs:type="string" other:iskey="false" other:pathspec="{" other:field="workaddress.state" />
<attr name="workaddress.street" xs:type="string" other:iskey="false" other:pathspec="{" other:field="workaddress.street" />
</rsb:info>
カスタムスキーマ例 では、上の例を含む完全なスキーマを確認できます。
プロパティ | 説明 |
other:dataverse | データセットが属するDataverse の名前。Analytics ビューでない場合は空です。 |
other:bucket | Couchbase 内のバケットまたはデータセットの名前。 |
other:flavorexpr | フレーバーテーブル内のURL エンコード条件。例えば"%60docType%60%20%3D%20%22chess%22"。 |
other:flavorvalue | フレーバーテーブル内のフレーバーの名前。例えば"chess"。 |
other:isarray | テーブルが配列の子テーブルかどうか。 |
other:pathspec | これは、other:childpath 内の区切り文字を解釈するために使用されます。詳しくはColumn Properties を参照してください。 |
other:childpath | 子テーブルのUNNEST に使用される属性へのパス。子テーブルでない場合は空です。 |
プロパティ | 説明 |
name | 必須。カラムの名前。小文字。 |
key | 主キーをマークするために使用されます。Document.Id では必須。その他のカラムでは任意。 |
xs:type | 必須。Sync App 内のカラムのタイプ。 |
other:iskey | 必須。キーと同じ値、またはキーが含まれていない場合は"false" にする必要があります。 |
other:pathspec | 必須。これは、other:field 内の区切り文字を解釈するために使用されます。 |
other:field | 必須。Couchbase のフィールドへのパス。 |
{ "numeric_object": { "0": 0 }, "array": [ 0 ] }Sync App がフィールドアクセスと配列アクセスを区別できるようにするために、pathspec はフィールド内の各"." が配列かオブジェクトかを判断するために使用されます。各"{" はフィールドアクセスを表し、各"[" は配列アクセスを表します。
例えば、フィールドが"a.0.b.1" で"pathspec" が"[{[" の場合、N1QL 式"a[0].b[1]" が生成されます。代わりに"pathspec" が"{{{" だった場合は、N1QL 式"a.`0`.b.`1`" が生成されます。
このセクションには、完全なスキーマが含まれています。Location プロパティをスキーマファイルを格納するファイルディレクトリに設定します。インフォセクションではCouchbase オブジェクトのリレーショナルビューを可能にします。詳細はカスタムスキーマ定義 を参照してください。次のテーブルではSELECT、INSERT、UPDATE、およびDELETE コマンドが以下のスキーマのGET、POST、MERGE、およびDELETE セクションとして実行されます。couchbaseadoSysData のような処理は内部の実行です。
<rsb:script xmlns:rsb="http://www.rssbus.com/ns/rsbscript/2">
<rsb:info title="Customers" description="Customers" other:dataverse="" other:bucket=customers"" other:flavorexpr="" other:flavorvalue="" other:isarray="false" other:pathspec="" other:childpath="">
<attr name="document.id" xs:type="string" key="true" other:iskey="true" other:pathspec="" />
<attr name="annual_revenue" xs:type="integer" other:iskey="false" other:pathspec="" other:field="annual_revenue" />
<attr name="homeaddress.city" xs:type="string" other:iskey="false" other:pathspec="{" other:field="homeaddress.city" />
<attr name="homeaddress.state" xs:type="string" other:iskey="false" other:pathspec="{" other:field="homeaddress.state" />
<attr name="homeaddress.street" xs:type="string" other:iskey="false" other:pathspec="{" other:field="homeaddress.street" />
<attr name="name" xs:type="string" other:iskey="false" other:pathspec="" other:field="name" />
<attr name="id" xs:type="integer" other:iskey="false" other:pathspec="" other:field="id" />
<attr name="offices" xs:type="string" other:iskey="false" other:pathspec="" other:field="offices" />
<attr name="offices.0" xs:type="string" other:iskey="false" other:pathspec="[" other:field="offices.0" />
<attr name="offices.1" xs:type="string" other:iskey="false" other:pathspec="[" other:field="offices.1" />
<attr name="workaddress.city" xs:type="string" other:iskey="false" other:pathspec="{" other:field="workaddress.city" />
<attr name="workaddress.state" xs:type="string" other:iskey="false" other:pathspec="{" other:field="workaddress.state" />
<attr name="workaddress.street" xs:type="string" other:iskey="false" other:pathspec="{" other:field="workaddress.street" />
</rsb:info>
</rsb:script>
このセクションでは、Couchbase Sync App の高度な機能を厳選して説明します。
Sync App を使用すると、事前設定されたクエリによって内容が決定されるユーザー定義ビューと呼ばれる仮想テーブルを定義できます。 このビューは、ドライバーに発行されるクエリを直接制御できない場合に有効です。 カスタムビューの作成と設定の概要については、ユーザー定義ビュー を参照してください。
SSL の設定 を使用して、Sync App が証明書のネゴシエーションをどのように扱うかを調整します。さまざまな証明書形式を選択できます。 詳しくは、接続文字列オプションにあるSSLServerCert プロパティを参照してください。
Windows プロキシとHTTP プロキシを含むファイアウォールとプロキシ に合致するようSync App を設定します。トンネル接続を設定することもできます。
Sync App は、Couchbase にできるだけ多くのSELECT ステートメント処理をオフロードし、残りのクエリをクライアント側のインメモリで処理します。
詳しくはクエリ処理 を参照してください。
CData ログを調整するために使用可能な設定の概要については、ログ を参照してください。基本的なロギングでは、 次の2つの接続プロパティを設定するだけです。LogModules 接続プロパティを使用してログに記録する情報のサブセットを選択できる、 より洗練されたロギングをサポートする多数の機能があります。
デフォルトでは、Sync App はサーバーの証明書をシステムの信頼できる証明書ストアと照合してSSL / TLS のネゴシエーションを試みます。
別の証明書を指定するには、利用可能なフォーマットについてSSLServerCert プロパティを参照してください。
Couchbase Sync App はクライアント証明書の設定もサポートしています。次を設定すれば、クライアント証明書を使って接続できます。
Windows のシステムプロキシ経由の接続では、接続プロパティを追加で設定する必要はありません。他のプロキシに接続するには、ProxyAutoDetect をfalse に設定します。
さらにHTTP プロキシへの認証には、ProxyServer とProxyPort に加えてProxyAuthScheme、ProxyUser、およびProxyPassword を設定します。
次のプロパティを設定します。
使用されている接続設定に応じて、Sync App はCouchbase エンティティとリレーショナルテーブルおよびビューとの間に、いくつかの異なるマッピングを提示できます。これらの各機能の詳細については、このドキュメントのNoSQL の部分を参照してください。
Please see the 自動スキーマ検出 section for more details on how flavor and child tables are exposed. In addition, the NewChildJoinsMode connection property is recommended for workflows that make heavy use of child tables. The documentation for that connection property details the improvements it makes to the Sync App data model.
Couchbase has different ways of grouping buckets and datasets depending on the CouchbaseService and version of Couchbase you are connecting to:
All of the schemas provided by the Sync App are dynamically retrieved from Couchbase, so any changes in the buckets or fields within Couchbase will be reflected in the Sync App the next time you connect.
You may also issue a reset query to refresh schemas without having to close the connection:
RESET SCHEMA CACHE
プロパティ | 説明 |
AuthScheme | The type of authentication to use when connecting to Couchbase. |
User | 認証で使用されるCouchbase ユーザーアカウント。 |
Password | ユーザーの認証で使用されるパスワード。 |
CredentialsFile | 複数のユーザーまたはバケットにクレデンシャルを提供する必要がある場合にこのプロパティを使用します。このファイルは他の形式の認証よりも優先されます。 |
Server | 接続するCouchbase サーバーのアドレス。 |
CouchbaseService | 接続するCouchbase サービスを決定します。デフォルトはN1QL です。利用可能なオプションはN1QL とAnalytics です。 |
ConnectionMode | Determines how to connect to the Couchbase server. Must be either Direct or Cloud. |
DNSServer | Determines what DNS server to use when retrieving Couchbase Capella information. |
N1QLPort | Couchbase N1QL Endpoint に接続するポートまたはURL。 |
AnalyticsPort | Couchbase Analytics Endpoint に接続するポートまたはURL。 |
WebConsolePort | Couchbase Web Console に接続するポートまたはURL。 |
プロパティ | 説明 |
SSLClientCert | SSL クライアント認証(2-way SSL)のためのTLS/SSL クライアント証明書ストア。 |
SSLClientCertType | TLS/SSL クライアント証明書を格納するキーストアの種類。 |
SSLClientCertPassword | TLS/SSL クライアント証明書のパスワード。 |
SSLClientCertSubject | TLS/SSL クライアント証明書のサブジェクト。 |
UseSSL | Couchbase サーバーに接続するときにTLS/SSL をネゴシエートするかどうか。 |
SSLServerCert | TLS/SSL を使用して接続するときに、サーバーが受け入れ可能な証明書。 |
プロパティ | 説明 |
FirewallType | プロキシベースのファイアウォールで使われるプロトコル。 |
FirewallServer | プロキシベースのファイアウォールの名前もしくはIP アドレス。 |
FirewallPort | プロキシベースのファイアウォールのTCP ポート。 |
FirewallUser | プロキシベースのファイアウォールに認証するために使うユーザー名。 |
FirewallPassword | プロキシベースのファイアウォールへの認証に使われるパスワード。 |
プロパティ | 説明 |
ProxyAutoDetect | これは、システムプロキシ設定を使用するかどうかを示します。 |
ProxyServer | HTTP トラフィックをルートするためのプロキシのホストネームもしくはIP アドレス。 |
ProxyPort | ProxyServer プロキシが起動しているTCP ポート。 |
ProxyAuthScheme | ProxyServer プロキシへの認証で使われる認証タイプ。 |
ProxyUser | ProxyServer プロキシへの認証に使われるユーザー名。 |
ProxyPassword | ProxyServer プロキシへの認証に使われるパスワード。 |
ProxySSLType | ProxyServer プロキシへの接続時に使用するSSL タイプ。 |
ProxyExceptions | ProxyServer 経由での接続が免除される宛先ホスト名またはIP のセミコロン区切りのリスト。 |
プロパティ | 説明 |
LogModules | ログファイルに含めるコアモジュール。 |
プロパティ | 説明 |
Location | テーブル、ビュー、およびストアドプロシージャを定義するスキーマファイルを格納するディレクトリへのパス。 |
BrowsableSchemas | このプロパティは、使用可能なスキーマのサブセットにレポートされるスキーマを制限します。例えば、BrowsableSchemas=SchemaA,SchemaB,SchemaC です。 |
Tables | このプロパティは、使用可能なテーブルのサブセットにレポートされるテーブルを制限します。例えば、Tables=TableA,TableB,TableC です。 |
Views | 使用可能なテーブルのサブセットにレポートされるビューを制限します。例えば、Views=ViewA,ViewB,ViewC です。 |
Dataverse | テーブルを検出するときにどのAnalysis dataverse をスキャンするか。 |
TypeDetectionScheme | provider がCouchbase にあるバケットからテーブルとカラムをどのように作成するかを決定します。 |
InferNumSampleValues | データ型を決定する前にスキャンする各フィールドの値の最大数。 TypeDetectionScheme がINFER に設定されている場合は 自動スキーマ検出 に適用されます。 |
InferSampleSize | バケット内で利用可能なカラムを探すためにスキャンするドキュメント数の最大値。 TypeDetectionScheme がINFER に設定されている場合は 自動スキーマ検出 に適用されます。 |
InferSimilarityMetric | 異なるスキーマが同じフレーバーだと見なされる類似度を指定します。 TypeDetectionScheme がINFER に設定されている場合は 自動スキーマ検出 に適用されます。 |
FlexibleSchemas | Whether the provider allows queries to use columns that it has not discovered. |
ExposeTTL | Specifies whether document TTL information should be exposed. |
NumericStrings | Whether to allow string values to be treated as numbers. |
IgnoreChildAggregates | Whether the provider exposes aggregate columns that are also available as child tables. Ignored if TableSupport is not set to Full. |
TableSupport | provider がCouchbase サーバー上のテーブルを検出するためにどれだけの努力をするか。 |
NewChildJoinsMode | Determines the kind of child table model the provider exposes. |
プロパティ | 説明 |
AllowJSONParameters | Allows raw JSON to be used in parameters when QueryPassthrough is enabled. |
ChildSeparator | 子テーブルを示すために使用する記号。 |
CreateTableRamQuota | The default RAM quota, in megabytes, to use when inserting buckets via the CREATE TABLE syntax. |
DataverseSeparator | Analytics dataverse およびscopes/collections を示すために使用する記号。 |
FlattenArrays | The number of elements to expose as columns from nested arrays. Ignored if IgnoreChildAggregates is enabled. |
FlattenObjects | フラット化されたオブジェクトプロパティとしてカラムを表示するには、 FlattenObjects をtrue に設定します。そうでなければ、配列にネストされたオブジェクトはJSON 文字列として返されます。 |
FlavorSeparator | フレーバーを示すために使用する記号。 |
GenerateSchemaFiles | スキーマを生成して保存するユーザーの好みのタイミングを示します。 |
InsertNullValues | Determines whether an INSERT should include fields that have NULL values. |
MaxRows | クエリで集計またはGROUP BY を使用しない場合に返される行数を制限します。これはLIMIT 句よりも優先されます。 |
Other | これらの隠しプロパティは特定のユースケースでのみ使用されます。 |
Pagesize | Couchbase から返されるページあたりの結果の最大数。 |
PeriodsSeparator | 階層を示すために使用する記号。 |
PseudoColumns | このプロパティは、テーブルのカラムとして疑似カラムが含まれているかどうかを示します。 |
QueryExecutionTimeout | クエリのサーバーサイドのタイムアウトを設定します。タイムアウトエラーを返す前にCouchbase がクエリを実行する期間を決定します。 |
QueryPassthrough | このオプションは、クエリをCouchbase サーバーにas-is で渡します。 |
RowScanDepth | テーブルで利用可能なカラムを探すためにスキャンする行数の最大値。 |
StrictComparison | SQL 入力クエリのフィルタをCouchbase クエリに変換する精度を調整します。 これは、値のカンマ区切りリストに設定できます。各値はdate、number、boolean、またはstring のいずれかです。 |
Timeout | タイムアウトエラーがスローされ、処理をキャンセルするまでの秒数。 |
TransactionDurability | Specifies how a document must be stored for a transaction to succeed. Specifies whether to use N1QL transactions when executing queries. |
TransactionTimeout | This sets the amount of time a transaction may execute before it is timed out by Couchbase. |
UpdateNullValues | Determines whether an UPDATE writes NULL values as NULL, or removes them. |
UseCollectionsForDDL | Whether to assume that CREATE TABLE statements use collections instead of flavors. Only takes effect when connecting to Couchbase v7+ and GenerateSchemaFiles is set to OnCreate. |
UserDefinedViews | カスタムビューを含むJSON コンフィギュレーションファイルを指すファイルパス。 |
UseTransactions | Specifies whether to use N1QL transactions when executing queries. |
ValidateJSONParameters | Allows the provider to validate that string parameters are valid JSON before sending the query to Couchbase. |
このセクションでは、本プロバイダーの接続文字列で設定可能なAuthentication プロパティの全リストを提供します。
プロパティ | 説明 |
AuthScheme | The type of authentication to use when connecting to Couchbase. |
User | 認証で使用されるCouchbase ユーザーアカウント。 |
Password | ユーザーの認証で使用されるパスワード。 |
CredentialsFile | 複数のユーザーまたはバケットにクレデンシャルを提供する必要がある場合にこのプロパティを使用します。このファイルは他の形式の認証よりも優先されます。 |
Server | 接続するCouchbase サーバーのアドレス。 |
CouchbaseService | 接続するCouchbase サービスを決定します。デフォルトはN1QL です。利用可能なオプションはN1QL とAnalytics です。 |
ConnectionMode | Determines how to connect to the Couchbase server. Must be either Direct or Cloud. |
DNSServer | Determines what DNS server to use when retrieving Couchbase Capella information. |
N1QLPort | Couchbase N1QL Endpoint に接続するポートまたはURL。 |
AnalyticsPort | Couchbase Analytics Endpoint に接続するポートまたはURL。 |
WebConsolePort | Couchbase Web Console に接続するポートまたはURL。 |
The type of authentication to use when connecting to Couchbase.
Note that only Basic authentication is supported when using the "Cloud" ConnectionMode.
複数のユーザーまたはバケットにクレデンシャルを提供する必要がある場合にこのプロパティを使用します。このファイルは他の形式の認証よりも優先されます。
複数のユーザーまたはバケットにクレデンシャルを提供する必要がある場合にこのプロパティを使用します。これは他の形式の認証よりも優先されます。
CredentialsFile を以下と同じマークアップを持つファイルへのパスに設定します。
[{"user": "YourUserName1", "pass":"YourPassword1"}, {"user": "YourUserName2", "pass":"YourPassword2"}]
接続するCouchbase サーバーのアドレス。
この値は、"couchbase-server.com" や"1.2.3.4" のように、ホスト名またはIP アドレスに設定できます。また、 "https://couchbase-server.com" や"http://1.2.3.4" のように、HTTP またはHTTPS URL に設定することもできます。If ConnectionMode is set to Cloud then this should be the hostname of the Couchbase Cloud instance as reported in the control panel.
URL 形式が使用される場合、このオプションを設定するとUseSSL オプションも設定されます。URL スキームが "https://" の場合UseSSL はtrue に設定され、"http://" の場合はUseSSL はfalse に設定されます。
このオプションの一部としてポート値は許容されていないため、"http://couchbase-server.com:8093" のような値は使用できません。WebConsolePort、N1QLPort、およびAnalyticsPort を使用してください。
この値は、"1.2.3.4, couchbase-server.com" のように、カンマで区切られた上記の形式で複数のサーバーを受け入れることもできます。これにより、リストされているサーバーにアクセスできない場合に、Sync App が接続を回復できるようになります。
Sync App は接続全体を回復しようとしますが、個々の操作を失う可能性があります。例えば、クエリの実行中にサーバーにアクセスできなくなった場合、長期実行クエリは失敗しますが、そのクエリは同じ接続で再試行でき、Sync App は次のアクティブなサーバーでそのクエリを実行します。
接続するCouchbase サービスを決定します。デフォルトはN1QL です。利用可能なオプションはN1QL とAnalytics です。
接続するCouchbase サービスを決定します。デフォルトはN1QL です。利用可能なオプションはN1QL とAnalytics です。
Determines how to connect to the Couchbase server. Must be either Direct or Cloud.
By default the Sync App connects to Couchbase directly using the address given in the Server option. The Server must be running the appropriate CouchbaseService to accept the connection. This will work in most on-premise or basic cloud deployments.
This should be set to Cloud when connecting to Couchbase Capella or a custom deployment that uses service records. These records will allow the Sync App to determine the exact Couchbase servers that provide the appropriate CouchbaseService. You must also set the DNSServer property so that the Sync App is able to fetch these service records.
Note that enabling Cloud mode will override these connection properties with the values discovered by contacting the cluster:
Determines what DNS server to use when retrieving Couchbase Capella information.
In most cases any public DNS server can be provided here such as the ones provided by OpenDNS, Cloudflare or Google.
If these are not accessible then you will need to use the DNS server configured by your network administrator.
Couchbase N1QL Endpoint に接続するポートまたはURL。
This port is used for submitting queries when CouchbaseService is set to N1QL. Any requests to manage indices will also go through this port. SSL を使用していない場合のデフォルトは8093 で、SSL を使用している場合のデフォルトは18093 になります。UseSSL を参照してください。
This option can be set one of two ways:
Couchbase Analytics Endpoint に接続するポートまたはURL。
This port is used for submitting queries when CouchbaseService is set to Analytics. SSL を使用していない場合のデフォルトは8095 で、SSL を使用している場合のデフォルトは18095 になります。UseSSL を参照してください。
This option can be set one of two ways:
Couchbase Web Console に接続するポートまたはURL。
This port is used for API operations like managing buckets. SSL を使用していない場合のデフォルトは8091 で、SSL を使用している場合のデフォルトは18091 になります。UseSSL を参照してください。
This option can be set one of two ways:
このセクションでは、本プロバイダーの接続文字列で設定可能なSSL プロパティの全リストを提供します。
プロパティ | 説明 |
SSLClientCert | SSL クライアント認証(2-way SSL)のためのTLS/SSL クライアント証明書ストア。 |
SSLClientCertType | TLS/SSL クライアント証明書を格納するキーストアの種類。 |
SSLClientCertPassword | TLS/SSL クライアント証明書のパスワード。 |
SSLClientCertSubject | TLS/SSL クライアント証明書のサブジェクト。 |
UseSSL | Couchbase サーバーに接続するときにTLS/SSL をネゴシエートするかどうか。 |
SSLServerCert | TLS/SSL を使用して接続するときに、サーバーが受け入れ可能な証明書。 |
SSL クライアント認証(2-way SSL)のためのTLS/SSL クライアント証明書ストア。
クライアント証明書のための証明書ストア名。
SSLClientCertType フィールドは、SSLClientCert により指定された証明書ストアの種類を指定します。ストアがパスワードで保護されている場合は、SSLClientCertPassword でパスワードを指定します。
SSLClientCert は、SSLClientCertSubject フィールドとともにクライアント証明書を指定するために使われます。SSLClientCert に値がある場合で、SSLClientCertSubject が設定されている場合は、証明書の検索が始まります。詳しくは、SSLClientCertSubject を参照してください。
証明書ストアの指定はプラットフォームに依存します。
Windows の共通のユーザとシステム証明書ストアの指定は以下のとおりです。
MY | 個人証明書と関連付けられた秘密キーを格納している証明書ストア。 |
CA | 証明機関の証明書。 |
ROOT | ルート証明書。 |
SPC | ソフトウェア発行元証明書。 |
Javaでは、証明書ストアは通常、証明書および任意の秘密キーを含むファイルです。
証明書ストアの種類がPFXFile の場合は、このプロパティにファイル名を設定します。PFXBlob の場合は、このプロパティをPFX ファイルのバイナリコンテンツ(例えば、PKCS12証明書ストア)に設定する必要があります。
TLS/SSL クライアント証明書を格納するキーストアの種類。
このプロパティには次の値の一つを設定できます。
USER - デフォルト | Windows の場合、現在のユーザーにより所有された証明書ストアであることを指定します。この種類はJava では利用できませんので注意してください。 |
MACHINE | Windows の場合、この証明書ストアがシステムストアであることを指定します。この種類はJava では利用できませんので注意してください。 |
PFXFILE | この証明書ストアは、証明書を含むPFX(PKCS12)ファイルの名前です。 |
PFXBLOB | この証明書ストアは、PFX(PKCS12)形式の証明書ストアを表すBase-64でエンコードされた文字列です。 |
JKSFILE | この証明書ストアは、証明書を含むJava key store(JKS)ファイルの名前です。この種類はJava でのみ利用できますので注意してください。 |
JKSBLOB | この証明書ストアは、Java key store(JKS)形式の証明書ストアを表すBase-64でエンコードされた文字列です。この種類はJava でのみ利用できますので注意してください。 |
PEMKEY_FILE | この証明書ストアは、秘密キーと任意の証明書を含むPEM でエンコードされたファイルの名前です。 |
PEMKEY_BLOB | この証明書ストアは、秘密キーと任意の証明書を含むBase-64でエンコードされた文字列です。 |
PUBLIC_KEY_FILE | この証明書ストアは、PEM またはDER でエンコードされた公開キーの証明書を含むファイルの名前です。 |
PUBLIC_KEY_BLOB | この証明書ストアは、PEM またはDER でエンコードされた公開キーの証明書を含むBase-64でエンコードされた文字列です。 |
SSHPUBLIC_KEY_FILE | この証明書ストアは、SSH 公開キーを含むファイルの名前です。 |
SSHPUBLIC_KEY_BLOB | この証明書ストアは、SSH 公開キーを含むBase-64でエンコードされた文字列です。 |
P7BFILE | この証明書ストアは、証明書を含むPKCS7 ファイルの名前です。 |
PPKFILE | この証明書ストアは、PuTTY 秘密キー(PPK)を含むファイルの名前です。 |
XMLFILE | この証明書ストアは、XML 形式の証明書を含むファイルの名前です。 |
XMLBLOB | この証明書ストアは、XML 形式の証明書を含む文字列の名前です。 |
TLS/SSL クライアント証明書のパスワード。
証明書ストアでパスワードが必要である場合、このプロパティを使用してパスワードを指定し、証明書ストアにアクセスできます。
TLS/SSL クライアント証明書のサブジェクト。
証明書のサブジェクトは、証明書をロードするときにストア内の証明書を検索するために使用されます。
完全に一致するものが見つからない場合、ストアはプロパティの値を含むサブジェクトを検索します。それでも一致するものが見つからない場合、プロパティは空白で設定され、証明書は選択されません。
"*" に設定すると、証明書ストアの1番目の証明書が選択されます。
証明書のサブジェクトは識別の名前フィールドおよび値のカンマ区切りのリストです。例えば、"CN=www.server.com, OU=test, C=US, [email protected]" です。共通のフィールドとその説明は以下のとおりです。
フィールド | 説明 |
CN | 共通名。一般的には、www.server.com のようなホスト名です。 |
O | 法人名 |
OU | 法人の部署名 |
L | 法人の住所(市町村名) |
S | 法人の住所(都道府県) |
C | 国名 |
E | Eメールアドレス |
フィールド値にカンマが含まれている場合は、それを引用符で囲む必要があります。
Couchbase サーバーに接続するときにTLS/SSL をネゴシエートするかどうか。
これがtrue に設定されている場合、以下のオプションのデフォルトが変更されます。
プロパティ | Plaintext デフォルト | SSL デフォルト |
AnalyticsPort | 8095 | 18095 |
N1QLPort | 8093 | 18093 |
WebConsolePort | 8091 | 18091 |
This option should be enabled when connecting to Couchbase Capella because all Capella deployments use SSL by default.
TLS/SSL を使用して接続するときに、サーバーが受け入れ可能な証明書。
TLS/SSL 接続を使用する場合は、このプロパティを使用して、サーバーが受け入れるTLS/SSL 証明書を指定できます。コンピュータによって信頼されていない他の証明書はすべて拒否されます。
このプロパティは、次のフォームを取ります:
説明 | 例 |
フルPEM 証明書(例では省略されています) | -----BEGIN CERTIFICATE----- MIIChTCCAe4CAQAwDQYJKoZIhv......Qw== -----END CERTIFICATE----- |
証明書を保有するローカルファイルへのパス。 | C:\cert.cer |
公開鍵(例では省略されています) | -----BEGIN RSA PUBLIC KEY----- MIGfMA0GCSq......AQAB -----END RSA PUBLIC KEY----- |
MD5 Thumbprint (hex 値はスペースおよびコロン区切り) | ecadbdda5a1529c58a1e9e09828d70e4 |
SHA1 Thumbprint (hex 値はスペースおよびコロン区切り) | 34a929226ae0819f2ec14b4a3d904f801cbb150d |
これを指定しない場合は、マシンが信用するすべての証明書が受け入れられます。
すべての証明書の受け入れを示すには、'*'を使用します。セキュリティ上の理由から、これはお勧めできません。
このセクションでは、本プロバイダーの接続文字列で設定可能なFirewall プロパティの全リストを提供します。
プロパティ | 説明 |
FirewallType | プロキシベースのファイアウォールで使われるプロトコル。 |
FirewallServer | プロキシベースのファイアウォールの名前もしくはIP アドレス。 |
FirewallPort | プロキシベースのファイアウォールのTCP ポート。 |
FirewallUser | プロキシベースのファイアウォールに認証するために使うユーザー名。 |
FirewallPassword | プロキシベースのファイアウォールへの認証に使われるパスワード。 |
プロキシベースのファイアウォールで使われるプロトコル。
このプロパティは、Sync App がFirewallServer プロキシ経由でトンネルトラフィックを使うためのプロトコルを指定します。デフォルトでは、Sync App はシステムプロキシに接続します。この動作を無効化し次のプロキシタイプのどれかで接続するには、ProxyAutoDetect をfalse に設定します。
タイプ | デフォルトポート | 説明 |
TUNNEL | 80 | これが設定されている場合、Sync App はCouchbase への接続を開き、プロキシを経由して通信が行われます。 |
SOCKS4 | 1080 | これが設定されている場合、Sync App はデータをFirewallServer およびFirewallPort で指定されたSOCS 4 プロキシ経由で送信し、接続リクエストが許容されるかどうかを決定します。 |
SOCKS5 | 1080 | これが設定されている場合、Sync App はデータをFirewallServer およびFirewallPort で指定されたSOCS 5 プロキシ経由で送信します。プロキシに認証が必要な場合には、FirewallUser およびFirewallPassword をプロキシが認識する認証情報に設定します。 |
HTTP プロキシへの接続には、ProxyServer およびProxyPort ポートを使ってください。HTTP プロキシへの認証には、ProxyAuthScheme、ProxyUser、およびProxyPassword を使ってください。
プロキシベースのファイアウォールの名前もしくはIP アドレス。
ファイアウォールトラバーサルを許容するために設定するIP アドレス、DNS 名、もしくはプロキシホスト名を指定するプロパティです。プロトコルはFirewallType で指定されます。このプロパティとFirewallServer を使って、SOCKS 経由での接続、もしくはトンネリングが可能です。HTTP プロキシへの接続には、ProxyServer を使用します。
Sync App はデフォルトでシステムプロキシを使うので注意してください。他のプロキシを使う場合には、ProxyAutoDetect をfalse に設定してください。
プロキシベースのファイアウォールのTCP ポート。
ファイアウォールトラバーサルを許容するために設定するプロキシベースのファイアウォールのTCP ポート。名前もしくはIP アドレスを指定するには、FirewallServer を使います。FirewallType でプロトコルを指定します。
プロキシベースのファイアウォールに認証するために使うユーザー名。
FirewallUser およびFirewallPassword プロパティは、FirewallType により指定された認証方式に則り、FirewallServer、およびFirewallPort で指定されたプロキシに対しての認証に使われます。
プロキシベースのファイアウォールへの認証に使われるパスワード。
このプロパティは、FirewallType により指定された認証メソッドに則り、FirewallServer およびFirewallPort で指定されたプロキシに渡されます。
このセクションでは、本プロバイダーの接続文字列で設定可能なProxy プロパティの全リストを提供します。
プロパティ | 説明 |
ProxyAutoDetect | これは、システムプロキシ設定を使用するかどうかを示します。 |
ProxyServer | HTTP トラフィックをルートするためのプロキシのホストネームもしくはIP アドレス。 |
ProxyPort | ProxyServer プロキシが起動しているTCP ポート。 |
ProxyAuthScheme | ProxyServer プロキシへの認証で使われる認証タイプ。 |
ProxyUser | ProxyServer プロキシへの認証に使われるユーザー名。 |
ProxyPassword | ProxyServer プロキシへの認証に使われるパスワード。 |
ProxySSLType | ProxyServer プロキシへの接続時に使用するSSL タイプ。 |
ProxyExceptions | ProxyServer 経由での接続が免除される宛先ホスト名またはIP のセミコロン区切りのリスト。 |
これは、システムプロキシ設定を使用するかどうかを示します。
これは他のプロキシ設定よりも優先されるため、カスタムプロキシ設定を使用するにはProxyAutoDetect をFALSE に設定する必要があります。
HTTP プロキシへの接続には、ProxyServer を参照してください。SOCKS やトンネリングなどの他のプロキシには、FirewallType を参照してください。
HTTP トラフィックをルートするためのプロキシのホストネームもしくはIP アドレス。
HTTP トラフィックをルートするためのプロキシのホストネームもしくはIP アドレス。HTTP プロキシへの認証には、Sync App はHTTP、Windows(NTLM)、もしくはKerberos 認証タイプを使用することができます。
SOCKS プロキシを経由して接続する、もしくは接続をトンネルするには、FirewallType を参照してください。
デフォルトで、Sync App はsystem プロキシを使います。他のプロキシを使う場合には、ProxyAutoDetect をfalse に設定します。
ProxyServer プロキシが起動しているTCP ポート。
HTTP トラフィックをリダイレクトするHTTP プロキシが実行されているポート。ProxyServer でHTTP プロキシを指定します。その他のプロキシタイプについては、FirewallType を参照してください。
ProxyServer プロキシへの認証で使われる認証タイプ。
この値は、ProxyServer およびProxyPort で指定されるHTTP プロキシに認証するために使われる認証タイプを指定します。
Sync App は、デフォルトでsystem proxy settings を使い、追加での設定が不要です。他のプロキシへの接続をする場合には、ProxyServer およびProxyPort に加え、ProxyAutoDetect をfalse に設定します。認証するには、ProxyAuthScheme を設定し、必要な場合にはProxyUser およびProxyPassword を設定します。
認証タイプは、次のどれかになります。
SOCKS 5 認証のような他の認証タイプを使用するには、FirewallType を参照してください。
ProxyServer プロキシへの認証に使われるユーザー名。
ProxyUser および ProxyPassword オプションは、ProxyServer で指定されたHTTP プロキシに対して接続および認証するために使用されます。
ProxyAuthScheme で使用可能な認証タイプを選択することができます。HTTP 認証を使う場合、これをHTTP プロキシで識別可能なユーザーのユーザー名に設定します。Windows もしくはKerberos 認証を使用する場合、このプロパティを次の形式のどれかでユーザー名に設定します。
user@domain domain\user
ProxyServer プロキシへの認証に使われるパスワード。
このプロパティは、NTLM(Windows)、Kerberos、もしくはHTTP 認証をサポートするHTTP プロキシサーバーに認証するために使われます。HTTP プロキシを指定するためには、ProxyServer およびProxyPort を設定します。認証タイプを指定するためにはProxyAuthScheme を設定します。
HTTP 認証を使う場合、さらにHTTP プロキシにProxyUser およびProxyPassword を設定します。
NTLM 認証を使う場合、Windows パスワードにProxyUser およびProxyPassword を設定します。Kerberos 認証には、これらを入力する必要があります。
SOCKS 5 認証もしくは、トンネリングは、FirewallType を参照してください。
デフォルトで、Sync App はsystem プロキシを使います。他のプロキシに接続する場合には、これをfalse に設定します。
ProxyServer プロキシへの接続時に使用するSSL タイプ。
このプロパティは、ProxyServer で指定されたHTTP プロキシへの接続にSSL を使用するかどうかを決定します。この値は、AUTO、ALWAYS、NEVER、TUNNEL のいずれかです。有効な値は次のとおりです。
AUTO | デフォルト設定。URL がHTTPS URL の場合、Sync App は、TUNNEL オプションを使います。URL がHTTP URL の場合、コンポーネントはNEVER オプションを使います。 |
ALWAYS | 接続は、常にSSL 有効となります。 |
NEVER | 接続は、SSL 有効になりません。 |
TUNNEL | 接続は、トンネリングプロキシを経由します。プロキシサーバーがリモートホストへの接続を開き、プロキシを経由して通信が行われます。 |
ProxyServer 経由での接続が免除される宛先ホスト名またはIP のセミコロン区切りのリスト。
ProxyServer は、このプロパティで定義されたアドレスを除くすべてのアドレスに使用されます。セミコロンを使用してエントリを区切ります。
Sync App は、追加設定なしにデフォルトでシステムのプロキシ設定を使います。この接続のプロキシ例外を明示的に構成するには、ProxyAutoDetect をfalse に設定して、ProxyServer およびProxyPort を設定する必要があります。認証するには、ProxyAuthScheme を設定し、必要な場合にはProxyUser およびProxyPassword を設定します。
ログファイルに含めるコアモジュール。
指定された(';' で区切られた)モジュールのみがログファイルに含まれます。デフォルトではすべてのモジュールが含まれます。
概要はログ ページを参照してください。
このセクションでは、本プロバイダーの接続文字列で設定可能なSchema プロパティの全リストを提供します。
プロパティ | 説明 |
Location | テーブル、ビュー、およびストアドプロシージャを定義するスキーマファイルを格納するディレクトリへのパス。 |
BrowsableSchemas | このプロパティは、使用可能なスキーマのサブセットにレポートされるスキーマを制限します。例えば、BrowsableSchemas=SchemaA,SchemaB,SchemaC です。 |
Tables | このプロパティは、使用可能なテーブルのサブセットにレポートされるテーブルを制限します。例えば、Tables=TableA,TableB,TableC です。 |
Views | 使用可能なテーブルのサブセットにレポートされるビューを制限します。例えば、Views=ViewA,ViewB,ViewC です。 |
Dataverse | テーブルを検出するときにどのAnalysis dataverse をスキャンするか。 |
TypeDetectionScheme | provider がCouchbase にあるバケットからテーブルとカラムをどのように作成するかを決定します。 |
InferNumSampleValues | データ型を決定する前にスキャンする各フィールドの値の最大数。 TypeDetectionScheme がINFER に設定されている場合は 自動スキーマ検出 に適用されます。 |
InferSampleSize | バケット内で利用可能なカラムを探すためにスキャンするドキュメント数の最大値。 TypeDetectionScheme がINFER に設定されている場合は 自動スキーマ検出 に適用されます。 |
InferSimilarityMetric | 異なるスキーマが同じフレーバーだと見なされる類似度を指定します。 TypeDetectionScheme がINFER に設定されている場合は 自動スキーマ検出 に適用されます。 |
FlexibleSchemas | Whether the provider allows queries to use columns that it has not discovered. |
ExposeTTL | Specifies whether document TTL information should be exposed. |
NumericStrings | Whether to allow string values to be treated as numbers. |
IgnoreChildAggregates | Whether the provider exposes aggregate columns that are also available as child tables. Ignored if TableSupport is not set to Full. |
TableSupport | provider がCouchbase サーバー上のテーブルを検出するためにどれだけの努力をするか。 |
NewChildJoinsMode | Determines the kind of child table model the provider exposes. |
テーブル、ビュー、およびストアドプロシージャを定義するスキーマファイルを格納するディレクトリへのパス。
Sync App のスキーマファイル(テーブルとビューの場合は.rsd ファイル、ストアドプロシージャの場合は.rsb ファイル)を含むディレクトリへのパス。このフォルダの場所は、実行ファイルの場所からの相対パスにすることができます。Location プロパティは、定義をカスタマイズしたり(例えば、カラム名を変更する、カラムを無視するなど)、新しいテーブル、ビュー、またはストアドプロシージャでデータモデルを拡張する場合にのみ必要です。
指定しない場合、デフォルトの場所は"%APPDATA%\\CData\\Couchbase Data Provider\\Schema" となり、%APPDATA% はユーザーのコンフィギュレーションディレクトリに設定されます:
Platform | %APPDATA% |
Windows | APPDATA 環境変数の値 |
Linux | ~/.config |
このプロパティは、使用可能なスキーマのサブセットにレポートされるスキーマを制限します。例えば、BrowsableSchemas=SchemaA,SchemaB,SchemaC です。
スキーマをデータベースからリストすると、負荷がかかる可能性があります。接続文字列でスキーマのリストを提供すると、 パフォーマンスが向上します。
このプロパティは、使用可能なテーブルのサブセットにレポートされるテーブルを制限します。例えば、Tables=TableA,TableB,TableC です。
テーブルを複数のデータベースからリストすると、負荷がかかる可能性があります。接続文字列でテーブルのリストを提供すると、Sync App のパフォーマンスが向上します。
このプロパティは、作業したいビューがすでにわかっていて、ビューが多すぎる場合に、ビューを自動的にリストする代わりに使用することもできます。
カンマ区切りのリストで使用したいテーブルを指定します。各テーブルは、角かっこ、二重引用符、またはバッククオートを使用してエスケープされた特殊文字列を含む有効なSQL 識別子である必要があります。 例えば、Tables=TableA,[TableB/WithSlash],WithCatalog.WithSchema.`TableC With Space` です。
複数のスキーマまたはカタログを持つデータソースに接続する場合は、複数のカタログやスキーマに存在するテーブル間の曖昧さを避けるため、最後の例のように、このプロパティにテーブルの完全修飾名を指定する必要があることに注意してください。
使用可能なテーブルのサブセットにレポートされるビューを制限します。例えば、Views=ViewA,ViewB,ViewC です。
ビューを複数のデータベースからリストすると、負荷がかかる可能性があります。接続文字列でビューのリストを提供すると、Sync App のパフォーマンスが向上します。
このプロパティは、作業したいビューがすでにわかっていて、ビューが多すぎる場合に、ビューを自動的にリストする代わりに使用することもできます。
カンマ区切りのリストで使用したいビューを指定します。各ビューは、角かっこ、二重引用符、またはバッククオートを使用してエスケープされた特殊文字列を含む有効なSQL 識別子である必要があります。 例えば、Views=ViewA,[ViewB/WithSlash],WithCatalog.WithSchema.`ViewC With Space` です。
複数のスキーマまたはカタログを持つデータソースに接続する場合は、複数のカタログやスキーマに存在するテーブル間の曖昧さを避けるため、最後の例のように、このプロパティにテーブルの完全修飾名を指定する必要があることに注意してください。
テーブルを検出するときにどのAnalysis dataverse をスキャンするか。
このプロパティはデフォルトでは空です。つまり、すべてのdataverse がスキャンされ、DataverseSeparator に記載されているようにテーブル名が生成されます。
このプロパティを空白以外の値に割り当てると、Sync App は対応するdataverse のみをスキャンします(例えば、"Default" に設定するとDefault dataverse がスキャンされます)。1つのdataverse しかスキャンされていないため、テーブル名の先頭にdataverse 名は付きません。 以前のバージョンのSync App から使用していて、後方互換性が必要な場合は、このプロパティを"Default" に設定することをお勧めします。
If you are connecting to Couchbase 7.0 or later, this option will be treated as a compound name containing both a dataset and a scope.
For example, if you have previously created collections like these:
CREATE ANALYTICS SCOPE websites.exampledotcom CREATE ANALYTICS COLLECTION websites.exampledotcom.traffic ON examplecom_traffic_bucket CREATE ANALYTICS COLLECTION websites.exampledotcom.ads ON examplecom_ads_bucketYou would set this option to "websites.exampledotcom".
provider がCouchbase にあるバケットからテーブルとカラムをどのように作成するかを決定します。
以下のオプションのカンマ区切りのリストです。
DocType | 各バケットをチェックして、ドキュメント内の"docType" フィールドのさまざまな値を探すことでテーブルを検出します。例えば、バケットbeer-sample に"docType" = 'brewery' および"docType" = 'beer' のドキュメントが含まれている場合、beer-sample(すべてのドキュメントを含む)、beer-sample.brewery(醸造のみを含む)、beer-sample.brewery(ビールのみを含む)の3つのテーブルが生成されます。
RowScan と同様に、各フレーバーのドキュメントのサンプルをスキャンし、各フィールドのデータ型を決定します。RowScanDepth は、各フレーバーからスキャンされるドキュメント数を決定します。 |
DocType=fieldName | DocType と似ていますが、"docType" ではなく"fieldName" というフィールドに基づいてスキャンします。"fieldName" は、大文字小文字の区別も含めて、Couchbase のフィールド名と完全に一致する必要があります。 |
Infer | N1QL INFER ステートメントを使用して存在するテーブルとカラムを判断します。これはDocType よりも柔軟なフレーバー検出を行いますが、Couchbase Enterprise でのみ利用可能です。 |
RowScan | バケットからドキュメントのサンプルを読み出し、ヒューリスティックにデータ型を決定します。RowScanDepth はスキャンするドキュメントの数を決定します。フレーバー検出は行いません。 |
None | RowScan に似ていますが、検出された型ではなく文字列型を持つカラムを常に返します。 |
データ型を決定する前にスキャンする各フィールドの値の最大数。 TypeDetectionScheme がINFER に設定されている場合は 自動スキーマ検出 に適用されます。
フィールドのデータ型を決定する前に、サンプリングされたドキュメントのすべてのフィールドからスキャンする値の最大数。 このプロパティは、Couchbase Infer コマンドを使用しているときに自動スキーマ検出 の追加設定を有効にします。このプロパティを使用するにはTypeDetectionScheme もInfer に設定する必要があります。
バケット内で利用可能なカラムを探すためにスキャンするドキュメント数の最大値。 TypeDetectionScheme がINFER に設定されている場合は 自動スキーマ検出 に適用されます。
バケット内で利用可能なカラムを探すためにスキャンするドキュメント数の最大値。Infer コマンドは、ここで指定されたサイズのドキュメントのランダムサンプルをスキャンすることにより、カラムのメタデータを返します。
大きい値を設定すると、パフォーマンスが低下する場合があります。小さな値を設定すると、特にnull データがある場合に、カラムとデータ型が正しく決定されないことがあります。
このプロパティは、Couchbase Infer コマンドを使用しているときに自動スキーマ検出 の追加設定を有効にします。このプロパティを使用するにはTypeDetectionScheme もInfer に設定する必要があります。
異なるスキーマが同じフレーバーだと見なされる類似度を指定します。 TypeDetectionScheme がINFER に設定されている場合は 自動スキーマ検出 に適用されます。
このプロパティは、2つのスキーマが同じフレーバーとみなされるためにどの程度類似している必要があるかを指定します。例えば、次の行を考えてみましょう。
Row 1: ColA, ColB, ColC, ColD
Row 2: ColA, ColB, ColE, ColF
Row 3: ColB, ColF, ColX, ColY
次の例のように、各フレーバに返されるカラムに異なるInferSimilarityMetric 値を設定できます。
その後、次のステートメントのように、ドット表記を使用してドキュメントフレーバーをクエリできます。
SELECT * FROM [Items.Technology]
このプロパティは、Couchbase Infer コマンドを使用しているときに自動スキーマ検出 の追加設定を有効にします。このプロパティを使用するにはTypeDetectionScheme もInfer に設定する必要があります。
Whether the provider allows queries to use columns that it has not discovered.
By default Sync App will only allow queries to use columns that it has found during the metadata discovery process (see TypeDetectionScheme for details). This means that the Sync App has the full information for each column it presents, but it also means that fields set on only a few documents may not be exposed. Disabling this option means that the Sync App will allow you to write a query with any columns you want. If you use columns in a query that have not been discovered the Sync App will assume that they are simple strings.
For example, the Sync App uses column type information to automatically convert dates for comparision since Couchbase cannot natively compare dates directly.
If the Sync App detects that datecol is a date field, it can apply the STR_TO_MILLIS conversion automatically:
/* SQL */ WHERE datecol < '2020-06-12'; /* N1QL */ WHERE STR_TO_MILLIS(datecol) < STR_TO_MILLIS('2020-06-12');
When using undiscovered columns the Sync App cannot make this type of conversion for you. You must apply any needed conversions manually to ensure that operations behave the way you want them to.
Specifies whether document TTL information should be exposed.
By default the Sync App does not expose TTL values or consider document TTLs when performing DML operations. Enabling this option exposes TTL values in two ways:
Note that enabling this features requires that your server be version 6.5.1 or later and that your CouchbaseService is set to N1QL. If either of these is not the case the Sync App will not connect.
Whether to allow string values to be treated as numbers.
By default this property is enabled and the Sync App will treat string values as numeric if they all the values it samples during schema detection are numeric. This can cause type errors later on if the field contains non-numeric values in other documents. If this property is disabled then numeric strings are left as strings although other string-based data types like timestamps will still be detected.
For example, the "code" field in the below bucket would be affected by this
setting. By default it would be considered an integer but if this property
were enabled it would be treated as a string.
{ "code": "123", "message": "Please restart your computer" } { "code": "456", "message": "Urgent update must be applied" }
Whether the provider exposes aggregate columns that are also available as child tables. Ignored if TableSupport is not set to Full.
The Sync App will expose array fields within a bucket as a separate child table, such as in the Games_scores example described in 自動スキーマ検出.
By default the Sync App will also expose these array fields as JSON aggregates on the base table.
For example, either of these queries would return information on game scores:
/* Return each score as an individual row */ SELECT value FROM Games_scores; /* Return all scores for each Game as a JSON string */ SELECT scores FROM Games;
Since these aggregates are exposed on the base table, they will be generated even when the information they contain is redundant.
For example, when performing this join the scores aggregate on Games is populated as well as the value column on Games_scores.
Internally this causes two copies of the scores data to be transferred from Couchbase.
/* Retrieves score data twice, once for Games.scores and once for Games_scores.value */ SELECT * FROM Games INNER JOIN Games_scores ON Games.[Document.Id] = Games_scores.[Document.Id]
This option can be used to prevent the aggregate field from being exposed when the same information is also available from a child table.
In the games example, setting this option to true means that the Games table would only expose a primary key column.
The only way to retrieve information about scores would be the child table, so score data would only be read once from Couchbase.
/* Only exposes Document.Id, not scores */ SELECT * FROM Games; /* Only retrieves score data once for Games_scores.value */ SELECT * FROM Games INNER JOIN Games_scores ON Games.[Document.Id] = Games_scores.[Document.Id]
Note that this option overrides FlattenArrays, since all data from flattened arrays is also avaialable as child tables. If this option is set then no array flattening is performed, even if FlattenArrays is set to a value over 0.
provider がCouchbase サーバー上のテーブルを検出するためにどれだけの努力をするか。
利用可能な値は以下のとおりです。
Full | Sync App は利用可能なバケットを検出し、それらの各バケットの内側を見て子テーブルを探します。これにより、ネストされたデータにアクセスする最も柔軟な方法が提供されますが、サーバー上の各バケットにプライマリインデックスがあることが必要です。 |
Basic | Sync App は利用可能なバケットを検出しますが、その中で子テーブルを探すことはしません。これは、スキーマ検出の時間を削減したい場合、またはバケットにプライマリインデックスがない場合にお勧めします。 |
None | Sync App はLocation ディレクトリにあるスキーマファイルのみを使用し、サーバー上のバケットを検出しません。このオプションは、スキーマファイルを作成済みの場合にのみ使用してください。スキーマファイルなしでこのオプションを使用すると、利用可能なテーブルがなくなります。 |
Determines the kind of child table model the provider exposes.
By default the Sync App exposes a backwards-compatible data model that is not fully relational. In this mode non-child tables have a primary key called Document.Id, but child tables do not have a primary key. Instead they have a column called Document.Id which has the same value as the Document.Id of the parent row that contains the child row.
For example, a parent table invoices containing invoice records may look like this:
Document.Id | customer |
1 | Adam |
2 | Beatrice |
3 | Charlie |
And its child invoices_lineitems containing line items may look like this:
Document.Id | item |
1 | laptop |
1 | keyboard |
2 | stapler |
3 | whiteboard |
3 | markers |
This model has several limitations:
The NewChildJoins data model is fully relational. In this mode non-child tables have the same Document.Id as before, but child tables are extended to have both a foreign key and a primary key. The foreign key is called Document.Parent and it refers to the Document.Id of the row in the parent table that contains the child row. The primary key is called Document.Id and it contains a path which uniquely refers to that child row.
For example, the same tables as above would look like this in the NewChildJoins model. invoices would be the same:
Document.Id | customer |
1 | Adam |
2 | Beatrice |
3 | Charlie |
However, invoices_lineitems would have both a primary and foreign key. The primary key contains the ID of the parent row as well as the child row's position in the parent.
Document.Id | Document.Parent | item |
1$1 | 1 | laptop |
1$2 | 1 | keyboard |
2$1 | 2 | stapler |
3$1 | 3 | whiteboard |
3$2 | 3 | markers |
This fixes the limitations of the old data model:
このセクションでは、本プロバイダーの接続文字列で設定可能なMiscellaneous プロパティの全リストを提供します。
プロパティ | 説明 |
AllowJSONParameters | Allows raw JSON to be used in parameters when QueryPassthrough is enabled. |
ChildSeparator | 子テーブルを示すために使用する記号。 |
CreateTableRamQuota | The default RAM quota, in megabytes, to use when inserting buckets via the CREATE TABLE syntax. |
DataverseSeparator | Analytics dataverse およびscopes/collections を示すために使用する記号。 |
FlattenArrays | The number of elements to expose as columns from nested arrays. Ignored if IgnoreChildAggregates is enabled. |
FlattenObjects | フラット化されたオブジェクトプロパティとしてカラムを表示するには、 FlattenObjects をtrue に設定します。そうでなければ、配列にネストされたオブジェクトはJSON 文字列として返されます。 |
FlavorSeparator | フレーバーを示すために使用する記号。 |
GenerateSchemaFiles | スキーマを生成して保存するユーザーの好みのタイミングを示します。 |
InsertNullValues | Determines whether an INSERT should include fields that have NULL values. |
MaxRows | クエリで集計またはGROUP BY を使用しない場合に返される行数を制限します。これはLIMIT 句よりも優先されます。 |
Other | これらの隠しプロパティは特定のユースケースでのみ使用されます。 |
Pagesize | Couchbase から返されるページあたりの結果の最大数。 |
PeriodsSeparator | 階層を示すために使用する記号。 |
PseudoColumns | このプロパティは、テーブルのカラムとして疑似カラムが含まれているかどうかを示します。 |
QueryExecutionTimeout | クエリのサーバーサイドのタイムアウトを設定します。タイムアウトエラーを返す前にCouchbase がクエリを実行する期間を決定します。 |
QueryPassthrough | このオプションは、クエリをCouchbase サーバーにas-is で渡します。 |
RowScanDepth | テーブルで利用可能なカラムを探すためにスキャンする行数の最大値。 |
StrictComparison | SQL 入力クエリのフィルタをCouchbase クエリに変換する精度を調整します。 これは、値のカンマ区切りリストに設定できます。各値はdate、number、boolean、またはstring のいずれかです。 |
Timeout | タイムアウトエラーがスローされ、処理をキャンセルするまでの秒数。 |
TransactionDurability | Specifies how a document must be stored for a transaction to succeed. Specifies whether to use N1QL transactions when executing queries. |
TransactionTimeout | This sets the amount of time a transaction may execute before it is timed out by Couchbase. |
UpdateNullValues | Determines whether an UPDATE writes NULL values as NULL, or removes them. |
UseCollectionsForDDL | Whether to assume that CREATE TABLE statements use collections instead of flavors. Only takes effect when connecting to Couchbase v7+ and GenerateSchemaFiles is set to OnCreate. |
UserDefinedViews | カスタムビューを含むJSON コンフィギュレーションファイルを指すファイルパス。 |
UseTransactions | Specifies whether to use N1QL transactions when executing queries. |
ValidateJSONParameters | Allows the provider to validate that string parameters are valid JSON before sending the query to Couchbase. |
Allows raw JSON to be used in parameters when QueryPassthrough is enabled.
This option affects how string parameters are handled when using direct N1QL and SQL++ queries through QueryPassthrough. For example, consider this query:
INSERT INTO `bucket` (KEY, VALUE) VALUES ("1", @x)
By default, this option is disabled and string parameters are quoted and escaped into JSON strings. That means that any value can be safely used as a string parameter, but it also means that parameters cannot be used as raw JSON documents:
/* * If @x is set to: test value " contains quote * * Result is a valid query */ INSERT INTO `bucket` (KEY, VALUE) VALUES ("1", "test value \" contains quote") /* * If @x is set to: {"a": ["valid", "JSON", "value"]} * * Result contains string instead of JSON document */ INSERT INTO `bucket` (KEY, VALUE) VALUES ("1", "{\"a\": [\"valid\", \"JSON\", \"value\"]})
When this option is enabled, string parameters are assumed to be valid JSON. This means that raw JSON documents can be used as parameters, but it also means that all simple strings must be escaped:
/* * If @x is set to: test value " contains quote * * Result is an invalid query */ INSERT INTO `bucket` (KEY, VALUE) VALUES ("1", test value " contains quote) /* * If @x is set to: {"a": ["valid", "JSON", "value"]} * * Result is a JSON document */ INSERT INTO `bucket` (KEY, VALUE) VALUES ("1", {"a": ["valid", "JSON", "value"]})
Please refer to ValidateJSONParameters for more details on how parameters are validated when this option is enabled.
子テーブルを示すために使用する記号。
バケット下にある配列の子テーブルを作成する際、Sync App は、この区切り文字と各パスエレメントを使用して、ベーステーブルの名前をコンカテネートすることによって子テーブルの名前を生成します。
例えば、このドキュメントがバケット"customers" にある場合、addresses フィールドの子テーブルは"customers_addresses" となります。
{ "addresses": [ {"street": "123 Main St"}, {"street": "424 Pleasant Ct"}, {"street": "719 Blue Way"} ] }
The default RAM quota, in megabytes, to use when inserting buckets via the CREATE TABLE syntax.
The default RAM quota, in megabytes, to use when inserting buckets via the CREATE TABLE syntax.
Analytics dataverse およびscopes/collections を示すために使用する記号。
Analytics サービスを使用すると、Sync App はすべての利用可能なdataverse からすべてのデータセットをスキャンします。潜在的な名前の衝突を避けるため、生成されるテーブル名にはdataverse 名とデータセット名が含まれます。
デフォルトでは"." に設定されているため、"Default" dataverse に"users" というデータセットがある場合、生成されるテーブルは"Default.users" になります。
This property is also used when generating table names for collections (on both N1QL and Analytics) on Couchbase 7 and later. For example, a bucket called "users" that has two collections called "active" and "inactive" under the "status" scope would be detected as the tables "users.status.active" and "users.status.inactive".
The number of elements to expose as columns from nested arrays. Ignored if IgnoreChildAggregates is enabled.
デフォルトで、ネスト配列はJSON 文字列として返されます。FlattenArrays プロパティはネスト配列のエレメントをフラット化してそれぞれのカラムとするために使われます。これは短い配列の場合にのみ推奨されます。
ネスト配列から返す要素の数にFlattenArrays を設定します。特定されたエレメントはカラムとして返されます。Zero-base のインデックスはカラム名にコンカテネートされます。他のエレメントは無視されます。
例えば、文字列の配列からエレメントのアービトラリー数を返すことができます。
["FLOW-MATIC","LISP","COBOL"]FlattenArrays が1に設定されている場合、配列は次のテーブルのようにフラット化されます。
カラム名 | カラム値 |
languages.0 | FLOW-MATIC |
フラット化されたオブジェクトプロパティとしてカラムを表示するには、 FlattenObjects をtrue に設定します。そうでなければ、配列にネストされたオブジェクトはJSON 文字列として返されます。
フラット化されたオブジェクトプロパティとしてカラムを表示するには、FlattenObjects をtrue に設定します。そうでなければ、配列にネストされたオブジェクトはJSON 文字列として返されます。プロパティ名は、カラム名を作り出すためにオブジェクト名にアンダースコアでコンカティネイトされます。
例えば、次のネストされたオブジェクトを接続時にフラット化できます。
address : { "street" : "123 Main St.", "city" : "Nowhere", "state" : "NY", "zip" : "12345" }FlattenObjects がtrue に設定されている場合、オブジェクトは次のテーブルのようにフラット化されます:
カラム名 | カラム値 |
address.street | 123 Main St. |
address.city | Nowhere |
address.state | NY |
address.zip | 12345 |
フレーバーを示すために使用する記号。
Sync App がDocType かInfer TypeDetectionScheme のいずれかを使用してフレーバーテーブルを検出すると、基底のバケット名、この区切り文字、およびバケットのプライマリフレーバーの値をコンカテネートしてフレーバーテーブルに名前を付けます。
例えば、Sync App が"beer-sample" バケットで"docType = 'beer'" というフレーバーを検出すると、"beer" doctype を持つ"beer-sample" 内のドキュメントのみを含む"beer-sample.beer" テーブルが生成されます。
スキーマを生成して保存するユーザーの好みのタイミングを示します。
GenerateSchemaFiles を使用すると、自動スキーマ検出 によって識別されたテーブル定義を保存できます。 このプロパティは、Location で指定されたパスの.rsd ファイルにスキーマをアウトプットします。
有効な設定は次のとおりです。
GenerateSchemaFiles をOnUse に設定すると、Sync App はSELECT クエリを実行したときにスキーマを生成します。スキーマはクエリのそれぞれの参照されたテーブルに対して生成されます。
GenerateSchemaFiles をOnCreate に設定すると、CREATE TABLE クエリが実行されたときにのみスキーマが生成されます。
このプロパティのもう一つの使い方は、接続するときにデータベース内のすべてのテーブルのスキーマを取得することです。これには、GenerateSchemaFiles をOnStart に設定して接続します。
データ構造が変化する場合には、GenerateSchemaFiles をNever に設定して動的なスキーマを使うことを検討してください。動的なスキーマの詳細については、自動スキーマ検出 を参照してください。
スキーマファイルはシンプルな形式となっており、変更は簡単です。詳しくは、カスタムスキーマ定義 を参照してください。
Determines whether an INSERT should include fields that have NULL values.
By default the Sync App uses NULL values provided in an INSERT statement and inserts them as JSON null values.
If this option is disabled, SQL NULL values are ignored during an INSERT. In the case of array columns (FlattenArrays must be set to retrieve these), this means that array indices are shifted over to compensate for the values that have been removed.
クエリで集計またはGROUP BY を使用しない場合に返される行数を制限します。これはLIMIT 句よりも優先されます。
クエリで集計またはGROUP BY を使用しない場合に返される行数を制限します。これはLIMIT 句よりも優先されます。
これらの隠しプロパティは特定のユースケースでのみ使用されます。
以下にリストされているプロパティは、特定のユースケースで使用可能です。通常のドライバーのユースケースおよび機能では、これらのプロパティは必要ありません。
複数のプロパティをセミコロン区切りリストで指定します。
DefaultColumnSize | データソースがメタデータにカラムの長さを提供しない場合に、文字列フィールドのデフォルトの長さを設定します。デフォルト値は2000です。 |
ConvertDateTimeToGMT | 日時の値を、マシンのローカルタイムではなくGMT グリニッジ標準時に変換するかどうかを決定します。 |
RecordToFile=filename | 基底のソケットデータ転送を指定のファイルに記録します。 |
Couchbase から返されるページあたりの結果の最大数。
Pagesize プロパティは、Couchbase から返されるページあたりの結果の最大数に影響を与えます。より大きい値を設定すると、1ページあたりの消費メモリが増える代わりに、パフォーマンスが向上する場合があります。
階層を示すために使用する記号。
オブジェクトと配列をフラット化するとき、Sync App はこの値を使って異なるレベルのオブジェクトと配列を分離します。例えば、Couchbase サーバーがこのようなドキュメントを返す(そしてFlattenObjects が有効になっている)とき、ピリオド区切り文字が"." に設定されている場合は、Sync App は"geo.latitude" と"geo.longitude" というカラムを返します。
{ "geo": { "latitude": 35.9132, "longitude": -79.0558 } }
このプロパティは、テーブルのカラムとして疑似カラムが含まれているかどうかを示します。
Entity Framework ではテーブルカラムでない疑似カラムに値を設定できないため、この設定はEntity Framework で特に便利です。この接続設定の値は、"Table1=Column1, Table1=Column2, Table2=Column3" の形式です。"*=*" のように"*" 文字を使用して、すべてのテーブルとすべてのカラムを含めることができます。
クエリのサーバーサイドのタイムアウトを設定します。タイムアウトエラーを返す前にCouchbase がクエリを実行する期間を決定します。
デフォルトは-1で、タイムアウトは無効になっています。タイムアウトを有効にする場合、値には量と単位の両方を含める必要があります。単位は "ns" (nanoseconds)、"us" (microseconds)、"ms" (milliseconds)、"s" (seconds)、"m" (minutes)、または"h" (hours) のいずれかです。例えば、"5m" と"300s" はどちらもタイムアウトを5分に設定します。
"index scan timeout" というサーバー側のタイムアウトもあります。そちらがより小さい場合はこれを上書きします。デフォルトではインデックススキャンタイムアウトは2分ですが、Couchbase サーバーの"indexer.settings.scan_timeout" プロパティを設定することで変更できます。
このオプションは、クエリをCouchbase サーバーにas-is で渡します。
これが設定されていると、クエリはCouchbase に直接渡されます。
テーブルで利用可能なカラムを探すためにスキャンする行数の最大値。
テーブルのカラムはテーブル行をスキャンすることで決定される必要があります。この値はスキャンされる行数の最大値を設定します。
大きい値を設定すると、パフォーマンスが低下する場合があります。小さい値を設定すると、特にnull データがある場合には、データ型を正しく判定できない場合があります。
SQL 入力クエリのフィルタをCouchbase クエリに変換する精度を調整します。 これは、値のカンマ区切りリストに設定できます。各値はdate、number、boolean、またはstring のいずれかです。
このオプションはデフォルトでは空です。つまり、 Couchbase に送られたWHERE 句は値を変換する追加の関数を含むのでより多くの比較が機能します。
例えば、"string" 設定をリストから除外すると、配列は変換され、文字列と比較えきるようになります。
SELECT * FROM Bucket WHERE MyArrayColumn = '[1,2,3]'
値を設定すると、関連するタイプの比較を含むクエリは文字どおりに変換されます。 これはCouchbase のインデックスをより有効に利用しますが、比較のタイプが Couchbase が直接比較できるフォーマットでなければならないことを意味します。
例えば、"date" がオプションの1つとして提供されている場合、日付は自動的には変換されないため、
Couchbase の場合と同じ形で格納されている必要があります。
SELECT * FROM Bucket WHERE MyDateColumn = '2018-10-31T10:00:00';
タイムアウトエラーがスローされ、処理をキャンセルするまでの秒数。
Timeout が0に設定されている場合は、操作がタイムアウトしません。処理が正常に完了するか、エラー状態になるまで実行されます。
Timeout の有効期限が切れても処理が完了していない場合は、Sync App は例外をスローします。
Specifies how a document must be stored for a transaction to succeed. Specifies whether to use N1QL transactions when executing queries.
If UseTransactions is enabled, then this option can be set to determine when Couchbase will allow writes in transactions to commit. The Couchbase documentation on Durability and Transactions contains the full details, below is a high-level summary.
This option controls requirements on both quorum and persistence. The quorum may either require no bucket replicas to receive the document (None), or a majority of replicas to have the document (all others). The persistence level requires either that the document be stored in the replica memory (Majoriy) or on the replica disk (MajorityAndPersistActive, PersistToMajority).
None is only useful if the bucket you are using is not configured for replicas. The other options can be used depending on the required performance and durability tradeoffs. Persisting to more replicas is slower but provides greater resilience against a node crashing.
This sets the amount of time a transaction may execute before it is timed out by Couchbase.
If transactions are enabled, then the Sync App will default to the server's default transaction timeout setting.
When enabling the timeout, the value must include both an amount and a unit, which can be one of: "ns" (nanoseconds), "us" (microseconds), "ms" (milliseconds), "s" (seconds), "m" (minutes) or "h" (hours). For example, "5m" and "300s" both set timeouts of 5 minutes.
There are also cluster-level and node-level transaction timeouts which override this one if they are smaller. For example, if the node-level timeout is set to a minute then setting this option to "5m" will have no effect.
Determines whether an UPDATE writes NULL values as NULL, or removes them.
By default the Sync App will use NULL values provided in an UPDATE statement and set the field in Couchbase to NULL.
If this option is disabled SQL NULL values in an UPDATE will cause the Sync App to mark the field as MISSING. This removes the field from the object containing it, or if the field is contained in an array (per FlattenArrays) then that element is set to NULL.
This option should be used with care as the Sync App may not detect that the field exists if it is removed from enough documents within a bucket.
Whether to assume that CREATE TABLE statements use collections instead of flavors. Only takes effect when connecting to Couchbase v7+ and GenerateSchemaFiles is set to OnCreate.
Normally the Sync App will assume that compound table names referenced in a CREATE TABLE statement are flavors.
For compatibility, this is still the default with Couchbase v7+ even though flavors are not recommended there.
CREATE TABLE [myBucket.myFlavor]( [Document.Id] VARCHAR PRIMARY KEY, docType VARCHAR, sometext VARCHAR, somenum INT )
Enable this option to assume that CREATE TABLE statements refer to collection instead.
In that scenario this query willl create the bucket and scope if necessary, before creating the colleciton and setting a primary index:
CREATE TABLE [myBucket.myScope.myCollection]( [Document.Id] VARCHAR PRIMARY KEY, sometext VARCHAR, somenum INT )
カスタムビューを含むJSON コンフィギュレーションファイルを指すファイルパス。
ユーザー定義ビューは、UserDefinedViews.json というJSON 形式のコンフィギュレーションファイルで定義されています。Sync App は、このファイルで指定されたビューを自動的に検出します。
また、複数のビュー定義を持ち、UserDefinedViews 接続プロパティを使用して制御することも可能です。このプロパティを使用すると、指定されたビューのみがSync App によって検知されます。
このユーザー定義ビューのコンフィギュレーションファイルは、次のようにフォーマットされています。
次に例を示します。
{ "MyView": { "query": "SELECT * FROM Customer WHERE MyColumn = 'value'" }, "MyView2": { "query": "SELECT * FROM MyTable WHERE Id IN (1,2,3)" } }UserDefinedViews 接続プロパティを使用して、JSON コンフィギュレーションファイルの場所を指定します。次に例を示します。
"UserDefinedViews", C:\Users\yourusername\Desktop\tmp\UserDefinedViews.json指定されたパスは引用符で囲まれていないことに注意してください。
Specifies whether to use N1QL transactions when executing queries.
By default the Sync App does not use transactions for compatibility with older versions of Couchbase. All of the other options require a connection to Couchbase 7 or above. The N1QL service must also be enabled using CouchbaseService.
Setting this to Always means that all queries will use transactions. An explicit transaction may be created on the connection and queries will use that transaction while it is active. If there is no explicit transaction then queries will use implicit transactions instead.
Setting this to Explicit enables support for explicit transactions only. Explicit transactions may be created but if one is not currently active, then statements will not create an implicit transaction.
Allows the provider to validate that string parameters are valid JSON before sending the query to Couchbase.
When AllowJSONParameters and QueryPassthrough are enabled, the query parameters given to the Sync App will be treated as raw JSON documents instead of arbitrary string values. This option controls what happens when invalid JSON is given to the Sync App in this mode.
When this option is enabled, the Sync App will check that all string parameters can be parsed as valid JSON. If any cannot be, an error will be raised and the query will not be run.
When this option is disabled, no check is performed and all string parameter values are substituted into the query directly. This makes executing prepared statements faster, but less safe since invalid N1QL or SQL++ may be sent to the Couchbase.