Openflow Connector for Google Driveを設定する¶
注釈
コネクタには、 コネクタ利用規約 が適用されます。
このトピックでは、Openflow Connector for Google Driveを設定する手順について説明します。
前提条件¶
Googleドライブ用Openflowコネクタ を確認してください。
Openflowを設定した ことを確認します。
認証情報を取得する¶
コネクタを設定するには、Snowflake OpenflowプロセッサーがGoogleからデータを読み取るための特定の権限とアカウント設定が必要です。このアクセス権は、サービスアカウントと、そのサービスアカウントとしてOpenflowが認証するためのキーを設定することで提供されます。詳細については、次をご参照ください。
Google Cloud Search API へのアクセスを構成する
Googleドライブの管理者として、以下の手順を実行します。
前提条件¶
以下の要件を満たしていることを確認します。
スーパー管理者権限を持つGoogleユーザーがいる
以下のロールを持つGoogleクラウドプロジェクトがある:
組織ポリシー管理者
組織管理者
サービスアカウントのキー作成を有効にする¶
Googleはデフォルトでサービスアカウントのキー作成を無効にしています。Openflowがサービスアカウント JSON を使用するには、このキー作成ポリシーをオフにする必要があります。
組織ポリシー管理者ロールを持つスーパー管理者アカウントで Google Cloud Console にログインします。
組織内のプロジェクトではなく、組織に関連付けられたプロジェクトであることを確認します。
Organization Policies をクリックします。
Disable service account key creation ポリシーを選択します。
Manage Policy をクリックし、適用をオフにします。
Set Policy をクリックします。
サービスアカウントとキーを作成する¶
Google Cloud Console を開き、サービスアカウントを作成するアクセス権が付与されたユーザーを使用して認証します。
あなたが組織のプロジェクトに参加していることを確認します。
左のナビゲーションで、 IAM & Admin の下にある、 Service Accounts タブを選択します。
Create Service Account をクリックします。
サービスアカウント名を入力し、 Create and Continue をクリックします。
Done をクリックします。サービスアカウントが一覧表示されたテーブルで、 OAuth 2 Client ID 列を探します。クライアント ID をコピーします。これは、次のセクションでドメイン全体の委任を設定するために必要になります。
新しく作成したサービスアカウントで、そのサービスアカウントが一覧表示されているテーブルの下のメニューをクリックし、 Manage keys を選択します。
Add key、 Create new key の順に選択します。
デフォルトの JSON を選択したまま、 Create をクリックします。
キーは.jsonファイルとしてブラウザーのDownloadsディレクトリにダウンロードされます。
一覧表示されたスコープに対してサービスアカウントにドメイン全体の委任を付与する¶
Google Adminアカウントにログインします。
Admin から Google Apps selector を選択します。
左のナビゲーションで、 Security を展開し、 Access、 Data control の順で選択し、 API Controls をクリックします。
API Controls 画面で Manage domain wild delegation を選択します。
Add new をクリックします。
「サービスアカウントとキーを作成する」セクションで取得した OAuth 2 クライアント ID と、以下のスコープを入力します。
Authorize をクリックします。
Snowflakeアカウントを設定する¶
Snowflakeアカウント管理者として、以下のタスクを手動で、または下記に含まれるスクリプトを使用して実行します。
新しいロールを作成するか、既存のロールを使用して データベース権限 を付与します。
タイプを SERVICE として、新しいSnowflakeサービスユーザーを作成します。
Snowflakeサービスユーザーに、前の手順で作成したロールを付与します。
ステップ2のSnowflake SERVICE ユーザーを key-pair auth で構成します。
Snowflakeではこの手順を強く推奨します。Openflowがサポートするシークレットマネージャ(AWS、Azure、Hashicorpなど)を構成し、公開キーと秘密キーを秘密ストアに格納します。
注釈
何らかの理由でシークレットマネージャを使用したくない場合は、組織のセキュリティポリシーに従って、キーペア認証に使用する公開キーと秘密キーファイルを保護する責任があります。
シークレットマネージャを構成したら、その認証方法を決定します。AWS 上では、Openflowに関連付けられた EC2 インスタンスロールが推奨されます。こうすることで、他の秘密を永続化する必要がなくなるからです。
Openflowで、右上のハンバーガーメニューから、このシークレットマネージャに関連付けられたParameter Providerを構成します。 Controller Settings » Parameter Provider に移動し、パラメーターの値をフェッチします。
この時点で、すべての認証情報を関連するパラメーターパスで参照することができるため、機密性の高い値をOpenflow内で永続化する必要はありません。
他のSnowflakeユーザーが、コネクタによって取り込まれた生の取り込みドキュメントやとテーブルへのアクセスを必要とする場合は(Snowflakeでのカスタム処理のためなど)、それらのユーザーにステップ1で作成したロールを付与します。
コネクタが使用するウェアハウスを指定します。まずは最小のウェアハウスサイズから始め、複製するテーブルの数や転送するデータ量に応じて異なるサイズを試してみてください。テーブル数が大きい場合は、通常、ウェアハウスのサイズを大きくするよりも、 マルチクラスターウェアハウス を使用した方がスケーリングが向上します。
設定例¶
--The following script assumes you'll need to create all required roles, users, and objects. --However, you may want to reuse some that are already in existence. --Create a Snowflake service user to manage the connector USE ROLE USERADMIN; CREATE USER <openflow_service_user> TYPE=SERVICE COMMENT='Service user for Openflow automation'; --Create a pair of secure keys (public and private). For more information, see --key-pair authentication. Store the private key for the user in a file to supply --to the connector’s configuration. Assign the public key to the Snowflake service user: ALTER USER <openflow_service_user> SET RSA_PUBLIC_KEY = '<pubkey>'; --Create a role to manage the connector and the associated data and --grant it to that user USE ROLE SECURITYADMIN; CREATE ROLE <openflow_connector_admin_role>; GRANT ROLE <openflow_connector_admin_role> TO USER <openflow_service_user>; --The following block is for USE CASE 2 (Cortex connect) ONLY --Create a role for read access to the cortex search service created by this connector. --This role should be granted to any role that will use the service CREATE ROLE <cortex_search_service_read_only_role>; GRANT ROLE <cortex_search_service_read_only_role> TO ROLE <whatever_roles_will_access_search_service>; --Create the database the data will be stored in and grant usage to the roles created USE ROLE ACCOUNTADMIN; --use whatever role you want to own your DB CREATE DATABASE IF NOT EXISTS <destination_database>; GRANT USAGE ON DATABASE <destination_database> TO ROLE <openflow_connector_admin_role>; --Create the schema the data will be stored in and grant the necessary privileges --on that schema to the connector admin role: USE DATABASE <destination_database>; CREATE SCHEMA IF NOT EXISTS <destination_schema>; GRANT USAGE ON SCHEMA <destination_schema> TO ROLE <openflow_connector_admin_role>; GRANT CREATE TABLE, CREATE DYNAMIC TABLE, CREATE STAGE, CREATE SEQUENCE, CREATE CORTEX SEARCH SERVICE ON SCHEMA <destination_schema> TO ROLE <openflow_connector_admin_role>; --The following block is for CASE 2 (Cortex connect) ONLY --Grant the Cortex read-only role access to the database and schema GRANT USAGE ON DATABASE <destination_database> TO ROLE <cortex_search_service_read_only_role>; GRANT USAGE ON SCHEMA <destination_schema> TO ROLE <cortex_search_service_read_only_role>; --Create the warehouse this connector will use if it doesn't already exist. Grant the --appropriate privileges to the connector admin role. Adjust the size according to your needs. CREATE WAREHOUSE <openflow_warehouse> WITH WAREHOUSE_SIZE = 'MEDIUM' AUTO_SUSPEND = 300 AUTO_RESUME = TRUE; GRANT USAGE, OPERATE ON WAREHOUSE <openflow_warehouse> TO ROLE <openflow_connector_admin_role>;
ユースケース1: コネクタ定義を使用してファイルのみを取り込む¶
コネクタ定義を使用して、次を行います。
取り込んだファイルにカスタム処理を実行する
Google Driveのファイルと権限を取り込み、最新の状態に保つ
コネクタを設定する¶
データエンジニアとして、以下のタスクを実行してコネクタをインストールおよび構成します。
コネクタをインストールする¶
Openflowの概要ページに移動します。 Featured connectors セクションで、 View more connectors を選択します。
Openflowのコネクタページでコネクタを探し、 Add to runtime を選択します。
Select runtime ダイアログで、 Available runtimes ドロップダウンリストからランタイムを選択します。
Add を選択します。
注釈
コネクタをインストールする前に、コネクタが取り込んだデータを格納するためのデータベースとスキーマをSnowflakeで作成したことを確認します。
Snowflakeアカウント認証情報でデプロイメントを認証し、Snowflakeアカウントへのランタイムアプリケーションのアクセスを許可するよう求められたられたら、 Allow を選択します。コネクタのインストールプロセスは数分で完了します。
Snowflakeアカウント認証情報でランタイムを認証します。
コネクタプロセスグループが追加されたOpenflowキャンバスが表示されます。
コネクタを構成する¶
インポートしたプロセスグループを右クリックし、 Parameters を選択します。
Google Driveソースパラメーター、 Google Drive宛先パラメーター、 Google Drive取り込みパラメーター の説明に従って、必要なパラメーター値を入力します。
Google Driveソースパラメーター¶
パラメーター |
説明 |
---|---|
Google委任ユーザー |
サービスアカウントで使用するユーザー |
GCP サービスアカウント JSON |
Google Cloud Consoleからダウンロードしたサービスアカウント JSON コネクタのGoogle APIs へのアクセスを許可します。 |
Google Drive宛先パラメーター¶
パラメーター |
説明 |
---|---|
宛先データベース |
データが永続化されるデータベース。既にSnowflakeに存在している必要があります |
宛先スキーマ |
データが永続化されるスキーマ。既にSnowflakeに存在している必要があります |
Snowflakeアカウント識別子 |
データが永続化されるSnowflakeアカウント名(形式: [organization-name]- [account-name])。 |
Snowflake認証ストラテジー |
Snowflakeへの認証のストラテジー。可能な値: SPCS 上でフローを実行している場合は SNOWFLAKE_SESSION_TOKEN、 秘密キーを使ったアクセスを設定したい場合は KEY_PAIR |
Snowflake秘密キー |
認証に使用される RSA 秘密キー。RSA キーは、 PKCS8 標準に従って書式設定され、標準的な PEM ヘッダーとフッターを持つ必要があります。Snowflake秘密キーファイルまたはSnowflake秘密キーのどちらかが定義されている必要があります。 |
Snowflake秘密キーファイル |
Snowflakeへの認証に使用される RSA 秘密キーを含むファイル。 PKCS8 標準に従って書式設定され、標準的な PEM ヘッダーとフッターを持ちます。ヘッダー行は |
Snowflake秘密キーパスワード |
Snowflake秘密キーファイルに関連付けられたパスワード |
Snowflakeロール |
クエリ実行時に使用されるSnowflakeロール |
Snowflakeのユーザー名 |
Snowflakeインスタンスへの接続に使用するユーザー名 |
Snowflakeウェアハウス |
クエリの実行に使用されるSnowflakeウェアハウス |
Google Drive取り込みパラメーター¶
パラメーター |
説明 |
---|---|
Google Drive ID |
コンテンツや更新を確認できるGoogle Shared Drive |
Googleフォルダー名 |
オプションで、Google Driveのフォルダー識別子(人間が読めるフォルダー名)を設定して、受信ファイルを以下の基準でフィルターできます。すべてのファイルタイプを希望する場合は、「空の文字列を設定する」を選択します。設定すると、プロバイダーが指定したフォルダーまたはサブフォルダー内のファイルのみが検索されます。空白または未設定の場合、フォルダーフィルターは適用されず、ドライブの下にあるすべてのファイルが取得されます。 |
Googleドメイン |
Google GroupsとDriveドライブが存在するGoogle Workspace Domain。 |
取り込むファイルの拡張子 |
取り込むファイルの拡張子を指定するコンマ区切りリスト。コネクタは、可能であれば最初にファイルを PDF 形式に変換しようとします。それにもかかわらず、元のファイル拡張子に対して拡張子チェックが実行されます。指定されたファイル拡張子の一部がCortex Parse Documentでサポートされていない場合、コネクタはそれらのファイルを無視し、イベントログに警告メッセージを記録して、他のファイルの処理を続行します。 |
Snowflakeファイルのハッシュテーブル名 |
ファイルコンテンツのハッシュを格納するために使用される内部テーブルで、コンテンツが変更されていない場合にそのコンテンツが更新されないようにします。 |
プレーンを右クリックし、 Enable all Controller Services を選択します。
インポートしたプロセスグループを右クリックし、 Start を選択します。コネクタがデータの取り込みを開始します。
ユースケース2: コネクタ定義を使用してファイルを取り込み、Cortexで処理を実行する¶
事前定義されたフロー定義を使用して、次を行います。
組織のGoogle Drive内の公開ドキュメント用に AI アシスタントを作成します。
AI アシスタントが組織のGoogle Driveで指定されたアクセス制御を順守できるようにします。
コネクタを設定する¶
データエンジニアとして、以下のタスクを実行してコネクタをインストールおよび構成します。
コネクタをインストールする¶
Openflowの概要ページに移動します。 Featured connectors セクションで、 View more connectors を選択します。
Openflowのコネクタページでコネクタを探し、 Add to runtime を選択します。
Select runtime ダイアログで、 Available runtimes ドロップダウンリストからランタイムを選択します。
Add を選択します。
注釈
コネクタをインストールする前に、コネクタが取り込んだデータを格納するためのデータベースとスキーマをSnowflakeで作成したことを確認します。
Snowflakeアカウント認証情報でデプロイメントを認証し、Snowflakeアカウントへのランタイムアプリケーションのアクセスを許可するよう求められたられたら、 Allow を選択します。コネクタのインストールプロセスは数分で完了します。
Snowflakeアカウント認証情報でランタイムを認証します。
コネクタプロセスグループが追加されたOpenflowキャンバスが表示されます。
コネクタを構成する¶
インポートしたプロセスグループを右クリックし、 Parameters を選択します。
Google Drive Cortex Connectソースパラメーター、 Google Drive Cortex Connect宛先パラメーター および Google Drive Cortex Connect取り込みパラメーター の説明に従って、必要なパラメーター値を入力します。
Google Drive Cortex Connectソースパラメーター¶
パラメーター |
説明 |
---|---|
Google委任ユーザー |
サービスアカウントで使用するユーザー |
GCP サービスアカウント JSON |
Google Cloud Consoleからダウンロードしたサービスアカウント JSON コネクタのGoogle APIs へのアクセスを許可します。 |
Google Drive Cortex Connect宛先パラメーター¶
パラメーター |
説明 |
---|---|
宛先データベース |
データが永続化されるデータベース。既にSnowflakeに存在している必要があります |
宛先スキーマ |
データが永続化されるスキーマ。既にSnowflakeに存在している必要があります |
Snowflakeアカウント識別子 |
データが永続化されるSnowflakeアカウント名(形式: [organization-name]- [account-name])。 |
Snowflake認証ストラテジー |
Snowflakeへの認証のストラテジー。可能な値: SPCS 上でフローを実行している場合は SNOWFLAKE_SESSION_TOKEN、 秘密キーを使ったアクセスを設定したい場合は KEY_PAIR |
Snowflake秘密キー |
認証に使用される RSA 秘密キー。RSA キーは、 PKCS8 標準に従って書式設定され、標準的な PEM ヘッダーとフッターを持つ必要があります。Snowflake秘密キーファイルまたはSnowflake秘密キーのどちらかが定義されている必要があります。 |
Snowflake秘密キーファイル |
Snowflakeへの認証に使用される RSA 秘密キーを含むファイル。 PKCS8 標準に従って書式設定され、標準的な PEM ヘッダーとフッターを持ちます。ヘッダー行は |
Snowflake秘密キーパスワード |
Snowflake秘密キーファイルに関連付けられたパスワード |
Snowflakeロール |
クエリ実行時に使用されるSnowflakeロール |
Snowflakeのユーザー名 |
Snowflakeインスタンスへの接続に使用するユーザー名 |
Snowflakeウェアハウス |
クエリの実行に使用されるSnowflakeウェアハウス |
Google Drive Cortex Connect取り込みパラメーター¶
パラメーター |
説明 |
---|---|
Google Drive ID |
コンテンツや更新を確認できるGoogle Shared Drive |
Googleフォルダー名 |
|
Googleドメイン |
Google GroupsとDriveドライブが存在するGoogle Workspace Domain。 |
OCR モード |
Cortex PARSE_DOCUMENT 関数でファイルを解析するときに使用する OCR モード。値は |
取り込むファイルの拡張子 |
取り込むファイルの拡張子を指定するコンマ区切りリスト。コネクタは、可能であれば最初にファイルを PDF 形式に変換しようとします。それにもかかわらず、元のファイル拡張子に対して拡張子チェックが実行されます。指定されたファイル拡張子の一部がCortex Parse Documentでサポートされていない場合、コネクタはそれらのファイルを無視し、イベントログに警告メッセージを記録して、他のファイルの処理を続行します。 |
Snowflakeファイルのハッシュテーブル名 |
ファイルコンテンツのハッシュを格納するために使用される内部テーブルで、コンテンツが変更されていない場合にそのコンテンツが更新されないようにします。 |
Snowflake Cortex Search Serviceユーザーロール |
Cortex Search serviceの使用権限を割り当てられたロールの識別子。 |
プレーンを右クリックし、 Enable all Controller Services を選択します。
インポートしたプロセスグループを右クリックし、 Start を選択します。コネクタがデータの取り込みを開始します。
ユースケース3: コネクタ定義をカスタマイズする¶
コネクタ定義をカスタマイズして、次を実行します。
Document AI で、取り込んだファイルを処理します。
取り込んだファイルにカスタム処理を実行します。
コネクタを設定する¶
データエンジニアとして、以下のタスクを実行してコネクタをインストールおよび構成します。
コネクタをインストールする¶
Openflowの概要ページに移動します。 Featured connectors セクションで、 View more connectors を選択します。
Openflowのコネクタページでコネクタを探し、 Add to runtime を選択します。
Select runtime ダイアログで、 Available runtimes ドロップダウンリストからランタイムを選択します。
Add を選択します。
注釈
コネクタをインストールする前に、コネクタが取り込んだデータを格納するためのデータベースとスキーマをSnowflakeで作成したことを確認します。
Snowflakeアカウント認証情報でデプロイメントを認証し、Snowflakeアカウントへのランタイムアプリケーションのアクセスを許可するよう求められたられたら、 Allow を選択します。コネクタのインストールプロセスは数分で完了します。
Snowflakeアカウント認証情報でランタイムを認証します。
コネクタプロセスグループが追加されたOpenflowキャンバスが表示されます。
コネクタを構成する¶
コネクタ定義をカスタマイズします。
以下のプロセスグループを削除します。
Check If Duplicate Content
Snowflake StageとParse PDF
Snowflake Cortexを更新する
Process Google Drive Metadata プロセスグループの出力にカスタム処理を添付します。各フローファイルは、1つのGoogle Driveファイルの変更を表します。フローファイルの属性については、
Fetch Google Drive Metadata
ドキュメントをご参照ください。
プロセスグループのパラメーターを入力します。 ユースケース1: コネクタ定義を使用してファイルのみを取り込む の場合と同じ手順に従います。コネクタ定義を変更した後、すべてのパラメーターが必要になるとは限らないことに注意してください。
フローを実行する¶
フローを実行します。
プロセスグループを開始します。フローでは、Snowflake内部に必要なオブジェクトをすべて作成します。
インポートしたプロセスグループを右クリックし、 開始 を選択します。
Cortex Search serviceをクエリする¶
Cortex Search サービスを使用して、Google Drive内のドキュメントとチャットしたりクエリしたりするためのチャットおよび検索アプリケーションを構築できます。
コネクタをインストールして構成し、Google Driveからコンテンツの取り込みを開始すると、Cortex Searchサービスをクエリできるようになります。Cortex Searchの使用に関する詳細については、 Cortex Search Serviceをクエリする をご参照ください。
応答をフィルターする
Cortex Searchサービスからの応答を特定のユーザーがGoogle Driveでアクセスできるドキュメントに制限するには、Cortex Searchクエリ時にユーザーのユーザー ID、またはメールアドレスを含むフィルターを指定できます。例えば、 filter.@contains.user_ids
または filter.@contains.user_emails
のようにします。コネクタによって作成されるCortex Searchサービスの名前は、スキーマ Cortex
の search_service
です。
Googleドライブから取り込んだファイルをCortex Searchサービスにクエリするために、 SQL ワークシートで以下の SQL コードを実行します。
以下を置き換えます。
application_instance_name
: データベースとコネクタアプリケーションインスタンスの名前。user_emailID
: 応答をフィルターしたいユーザーのメール ID。your_question
: 応答を得たい質問。number_of_results
: 応答で返す結果の最大数。最大値は1000で、デフォルト値は10です。
SELECT PARSE_JSON(
SNOWFLAKE.CORTEX.SEARCH_PREVIEW(
'<application_instance_name>.cortex.search_service',
'{
"query": "<your_question>",
"columns": ["chunk", "web_url"],
"filter": {"@contains": {"user_emails": "<user_emailID>"} },
"limit": <number_of_results>
}'
)
)['results'] AS results
columns
に入力できる値の完全なリストを以下に示します。
列名 |
型 |
説明 |
---|---|---|
|
String |
Google Driveドキュメントルートからのファイルへのフルパス。例: |
|
String |
Google Driveのオリジナルファイルをブラウザーで表示する URL。 |
|
String |
項目の最新変更日時。 |
|
String |
Cortex Searchのクエリにマッチしたドキュメントのテキスト。 |
|
配列 |
ドキュメントにアクセスできる Microsoft 365ユーザー IDs の配列。ドキュメントに割り当てられているすべてのMicrosoft 365グループのユーザー IDs も含まれます。特定のユーザー ID を探すには、 ユーザーを取得する をご参照ください。 |
|
配列 |
ドキュメントにアクセスできるMicrosoft 365ユーザーのメール IDs の配列。ドキュメントに割り当てられているすべてのMicrosoft 365グループのユーザーメール IDs も含まれます。 |
例: AI アシスタントに人事(HR)情報をクエリする
Cortex Searchを使用して、オンボーディング、行動規範、チームプロセス、組織ポリシーなど、 HR の最新バージョンの情報とチャットする従業員向けの AI アシスタントをクエリできます。応答フィルターを使用すると、Google Driveで構成されたアクセス制御を順守しながら、 HR チームメンバーに従業員契約のクエリを許可することもできます。
Google Driveから取り込まれたファイルでCortex Searchサービスをクエリするために、 SQL ワークシート で以下を実行します。データベースをアプリケーションインスタンス名として、スキーマを Cortex として選択します。
以下を置き換えます。
application_instance_name
: データベースとコネクタアプリケーションインスタンスの名前。user_emailID
: 応答をフィルターしたいユーザーのメール ID。
SELECT PARSE_JSON(
SNOWFLAKE.CORTEX.SEARCH_PREVIEW(
'<application_instance_name>.cortex.search_service',
'{
"query": "What is my vacation carry over policy?",
"columns": ["chunk", "web_url"],
"filter": {"@contains": {"user_emails": "<user_emailID>"} },
"limit": 1
}'
)
)['results'] AS results
Pythonワークシート で以下のコードを実行し、Google Driveから取り込んだファイルでCortex Searchサービスをクエリします。データベースに snowflake.core
パッケージが追加されていることを確認します。
以下を置き換えます。
application_instance_name
: データベースとコネクタアプリケーションインスタンスの名前。user_emailID
: 応答をフィルターしたいユーザーのメール ID。
import snowflake.snowpark as snowpark
from snowflake.snowpark import Session
from snowflake.core import Root
def main(session: snowpark.Session):
root = Root(session)
# fetch service
my_service = (root
.databases["<application_instance_name>"]
.schemas["cortex"]
.cortex_search_services["search_service"]
)
# query service
resp = my_service.search(
query="What is my vacation carry over policy?",
columns = ["chunk", "web_url"],
filter = {"@contains": {"user_emails": "<user_emailID>"} },
limit=1
)
return (resp.to_json())
以下のコードをコマンドラインインターフェイスで実行し、Google Driveから取り込んだファイルでCortex Searchサービスをクエリします。Snowflake REST APIs にアクセスするには、キーペア認証と OAuth による認証が必要です。詳細については、 Rest API および Snowflakeでの Snowflake REST APIs 認証 をご参照ください。
以下を置き換えます。
application_instance_name
: データベースとコネクタアプリケーションインスタンスの名前。account_url
: Snowflakeアカウント URL。アカウント URL の見つけ方については、 アカウントの組織名とアカウント名の検索 を参照してください。
curl --location "https://<account_url>/api/v2/databases/<application_instance_name>/schemas/cortex/cortex-search-services/search_service" \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header "Authorization: Bearer <CORTEX_SEARCH_JWT>" \
--data '{
"query": "What is my vacation carry over policy?",
"columns": ["chunk", "web_url"],
"limit": 1
}'