Q in QuickSight トピックの Include を一括で設定する
コーヒーが好きな emi です。
Q in QuickSight トピックでは DATA FIELDS で各カラムの詳細設定が可能です。
トピックでは元になるデータセットのカラムがそのまま DATA FIELDS として取り込まれますが、このカラムが何百列にもなると 1 つ 1 つ詳細設定を行うのが大変です。
トピックの詳細設定値は AWS CLI などの API 経由で取得できるため、この詳細設定を取得して設定ファイルを作成すれば一括更新ができます。
Q in QuickSight の有効化方法やトピックの作成方法は以下のブログを参照ください。
(おさらい)Include とは
トピックは一言で説明しにくいのですが、データセットに含まれる情報がどういうものでどんな意味を持つかを登録しておく場所、とでも言いましょうか。データセットのインデックス(索引)のようなものです。
トピックを作成すると、生成 AI の機能 Q で元のデータに対して自然言語で問い合わせができます。この機能はドキュメントで「Generative Q&A」と書かれています。
Q in QuickSight でデータセットをもとにトピックを作成すると、データセットのカラムが取り込まれます。
トピックにおける Include とは、生成 AI を使った Q への Q&A で、質問への回答に該当のフィールド情報を含めるか含めないかを設定する項目です。
Include をオフにすると、質問への回答にそのフィールドの情報を含まなくなります。
- ドキュメント
-
データセットに自分やリーダーが使用しないフィールドが含まれている場合、または回答に含めたくないフィールドがある場合は、トピックから除外できます。これらのフィールドを除外すると、Q の回答と Q インデックスから削除され、リーダーが受け取る回答の精度が向上します。
ステップ 3: 使用されていないフィールドを除外する -
リーダーの質問に対する回答に含めないフィールドを削除します。この例では、フィールド Row ID が削除されました。その結果、Q は Row ID フィールドを用語としてインデックスを付けず、回答にその値 (顧客の郵送先住所) のいずれも使用しません。フィールドを除外するには、[Include] をオフにします。
ステップ 3: サンプルトピックを検索する
-
Include を一括で変更する
さて、それでは Include を一括で OFF にする設定をやってみます。
作成した CSV で使った CSV ファイルをアップロードしてデータセットを作成し、トピックを作成しておきます。作業はバージニア北部リージョンで行っています。(2025/2/14 現在、Q in QuickSight は東京リージョンで未 GA)
datetime,department,section,status,chocolate,donut,osenbei
2024-10-16 17:00:00.000,コンピューティング部,EC2課,不調,19,1,20
2024-10-16 17:00:00.000,コンピューティング部,Lambda課,不調,12,1,22
2024-10-16 17:00:00.000,コンピューティング部,Lightsail課,不調,13,1,24
2024-10-16 17:00:00.000,ストレージ部,EFS課,超ごきげん,18,21,29
2024-10-16 17:00:00.000,ストレージ部,FSx課,ごきげん,18,10,24
2024-10-16 17:00:00.000,ストレージ部,S3課,不調,15,2,20
2024-10-16 17:00:00.000,データベース部,RDS課,普通,14,8,28
2024-10-16 17:00:00.000,データベース部,DocumentDB課,不調,19,2,29
2024-10-16 17:00:00.000,データベース部,DynamoDB課,超ごきげん,11,22,24
2024-10-16 18:00:00.000,コンピューティング部,EC2課,普通,18,8,19
2024-10-16 18:00:00.000,コンピューティング部,Lambda課,普通,11,8,21
2024-10-16 18:00:00.000,コンピューティング部,Lightsail課,普通,12,8,23
2024-10-16 18:00:00.000,ストレージ部,EFS課,超ごきげん,17,20,28
2024-10-16 18:00:00.000,ストレージ部,FSx課,超ごきげん,17,20,23
2024-10-16 18:00:00.000,ストレージ部,S3課,普通,14,9,19
2024-10-16 18:00:00.000,データベース部,RDS課,ごきげん,13,12,27
2024-10-16 18:00:00.000,データベース部,DocumentDB課,普通,18,6,28
2024-10-16 18:00:00.000,データベース部,DynamoDB課,超ごきげん,10,23,23
2024-10-16 19:00:00.000,コンピューティング部,EC2課,不調,17,1,18
2024-10-16 19:00:00.000,コンピューティング部,Lambda課,ごきげん,10,12,20
2024-10-16 19:00:00.000,コンピューティング部,Lightsail課,ごきげん,11,13,22
2024-10-16 19:00:00.000,ストレージ部,EFS課,超ごきげん,16,25,27
2024-10-16 19:00:00.000,ストレージ部,FSx課,不調,16,0,22
2024-10-16 19:00:00.000,ストレージ部,S3課,ご機嫌,13,13,18
2024-10-16 19:00:00.000,データベース部,RDS課,超ごきげん,12,20,26
2024-10-16 19:00:00.000,データベース部,DocumentDB課,ご機嫌,18,12,27
2024-10-16 19:00:00.000,データベース部,DynamoDB課,超ごきげん,9,22,22
まずは最初の設定を確認します。トピックを開きます。
作成したばかりだと「Last modified」のユーザーが「Q_SERVICE_USER」になっているんですね。
「Data」タブを開き「DATA FIELDS」を確認すると、現在はすべて ON になっています。
では、この Include をすべて OFF にしてみます。
Cloushell から AWS CLI で API を実行していきます。リージョンをバージニア北部リージョンにしておいてください。
list-topics コマンドでトピック ID を取得する
まずは list-topics コマンドでトピックの一覧とトピック ID を取得します。
aws quicksight list-topics \
--aws-account-id 123456789012
▼実行結果
~ $ aws quicksight list-topics \
> --aws-account-id 123456789012
{
"Status": 200,
"TopicsSummaries": [
{
"Arn": "arn:aws:quicksight:us-east-1:123456789012:topic/G7NAH7CCmx2csyB9gMrGbKxAZoOcsEhu",
"TopicId": "G7NAH7CCmx2csyB9gMrGbKxAZoOcsEhu",
"Name": "sweets_with_status",
"UserExperienceVersion": "NEW_READER_EXPERIENCE"
}
],
"RequestId": "c9e7e964-b5e3-489b-a8f4-23aaac92172d"
}
~ $
"TopicId": "G7NAH7CCmx2csyB9gMrGbKxAZoOcsEhu"
よりトピック ID は G7NAH7CCmx2csyB9gMrGbKxAZoOcsEhu
であることが確認できました。
describe-topic コマンドで現在の設定値を取得する
続いて describe-topic コマンドでトピックの設定値を JSON で取得します。
aws quicksight describe-topic \
--aws-account-id 123456789012 \
--topic-id G7NAH7CCmx2csyB9gMrGbKxAZoOcsEhu
実行結果
~ $ aws quicksight describe-topic \
> --aws-account-id 123456789012 \
> --topic-id G7NAH7CCmx2csyB9gMrGbKxAZoOcsEhu
{
"Status": 200,
"Arn": "arn:aws:quicksight:us-east-1:123456789012:topic/G7NAH7CCmx2csyB9gMrGbKxAZoOcsEhu",
"TopicId": "G7NAH7CCmx2csyB9gMrGbKxAZoOcsEhu",
"Topic": {
"Name": "sweets_with_status",
"Description": "sweets_with_status",
"UserExperienceVersion": "NEW_READER_EXPERIENCE",
"DataSets": [
{
"DatasetArn": "arn:aws:quicksight:us-east-1:123456789012:dataset/40e73fba-718c-4ede-b791-df32268bf966",
"DatasetName": "Sweets With Status",
"DataAggregation": {
"DefaultDateColumnName": "datetime"
},
"Columns": [
{
"ColumnName": "datetime",
"ColumnFriendlyName": "Datetime",
"ColumnDescription": "",
"ColumnSynonyms": [
"date",
"time"
],
"ColumnDataRole": "DIMENSION",
"IsIncludedInTopic": true,
"SemanticType": {
"TypeName": "Date"
},
"NeverAggregateInFilter": false
},
{
"ColumnName": "department",
"ColumnFriendlyName": "Department",
"ColumnDescription": "",
"ColumnSynonyms": [
"division"
],
"ColumnDataRole": "DIMENSION",
"IsIncludedInTopic": true,
"NeverAggregateInFilter": false
},
{
"ColumnName": "section",
"ColumnFriendlyName": "Section",
"ColumnDescription": "",
"ColumnSynonyms": [
"segment"
],
"ColumnDataRole": "DIMENSION",
"IsIncludedInTopic": true,
"NeverAggregateInFilter": false
},
{
"ColumnName": "status",
"ColumnFriendlyName": "Status",
"ColumnDescription": "",
"ColumnSynonyms": [],
"ColumnDataRole": "DIMENSION",
"IsIncludedInTopic": true,
"NeverAggregateInFilter": false
},
{
"ColumnName": "chocolate",
"ColumnFriendlyName": "Chocolate",
"ColumnDescription": "",
"ColumnSynonyms": [
"cacao",
"candy",
"cocoa"
],
"ColumnDataRole": "MEASURE",
"IsIncludedInTopic": true,
"NeverAggregateInFilter": false
},
{
"ColumnName": "donut",
"ColumnFriendlyName": "Donut",
"ColumnDescription": "",
"ColumnSynonyms": [
"doughnut",
"muffin"
],
"ColumnDataRole": "MEASURE",
"IsIncludedInTopic": true,
"NeverAggregateInFilter": false
},
{
"ColumnName": "osenbei",
"ColumnFriendlyName": "Osenbei",
"ColumnDescription": "",
"ColumnSynonyms": [
"osen"
],
"ColumnDataRole": "MEASURE",
"IsIncludedInTopic": true,
"NeverAggregateInFilter": false
}
]
}
],
"ConfigOptions": {
"QBusinessInsightsEnabled": true
}
},
"RequestId": "7f6bb797-6190-4c62-9f8d-3f616dbbdfed"
}
~ $
スケルトンファイルの作成
では update-topic コマンドでトピックを更新していこうかと思ったのですが、設定値の JSON が長いのでスケルトンファイルを使った方が良さそうです。
AWS CLI のスケルトンファイルの使い方は以下のブログで紹介しているので参照ください。
まず --generate-cli-skeleton
パラメーターを指定して、JSON のひな形を表示します。
aws quicksight update-topic --generate-cli-skeleton
実行結果
~ $ aws quicksight update-topic --generate-cli-skeleton
{
"AwsAccountId": "",
"TopicId": "",
"Topic": {
"Name": "",
"Description": "",
"UserExperienceVersion": "LEGACY",
"DataSets": [
{
"DatasetArn": "",
"DatasetName": "",
"DatasetDescription": "",
"DataAggregation": {
"DatasetRowDateGranularity": "SECOND",
"DefaultDateColumnName": ""
},
"Filters": [
{
"FilterDescription": "",
"FilterClass": "ENFORCED_VALUE_FILTER",
"FilterName": "",
"FilterSynonyms": [
""
],
"OperandFieldName": "",
"FilterType": "CATEGORY_FILTER",
"CategoryFilter": {
"CategoryFilterFunction": "EXACT",
"CategoryFilterType": "CUSTOM_FILTER",
"Constant": {
"ConstantType": "SINGULAR",
"SingularConstant": "",
"CollectiveConstant": {
"ValueList": [
""
]
}
},
"Inverse": true
},
"NumericEqualityFilter": {
"Constant": {
"ConstantType": "SINGULAR",
"SingularConstant": ""
},
"Aggregation": "NO_AGGREGATION"
},
"NumericRangeFilter": {
"Inclusive": true,
"Constant": {
"ConstantType": "SINGULAR",
"RangeConstant": {
"Minimum": "",
"Maximum": ""
}
},
"Aggregation": "NO_AGGREGATION"
},
"DateRangeFilter": {
"Inclusive": true,
"Constant": {
"ConstantType": "SINGULAR",
"RangeConstant": {
"Minimum": "",
"Maximum": ""
}
}
},
"RelativeDateFilter": {
"TimeGranularity": "SECOND",
"RelativeDateFilterFunction": "PREVIOUS",
"Constant": {
"ConstantType": "SINGULAR",
"SingularConstant": ""
}
}
}
],
"Columns": [
{
"ColumnName": "",
"ColumnFriendlyName": "",
"ColumnDescription": "",
"ColumnSynonyms": [
""
],
"ColumnDataRole": "DIMENSION",
"Aggregation": "SUM",
"IsIncludedInTopic": true,
"DisableIndexing": true,
"ComparativeOrder": {
"UseOrdering": "GREATER_IS_BETTER",
"SpecifedOrder": [
""
],
"TreatUndefinedSpecifiedValues": "LEAST"
},
"SemanticType": {
"TypeName": "",
"SubTypeName": "",
"TypeParameters": {
"KeyName": ""
},
"TruthyCellValue": "",
"TruthyCellValueSynonyms": [
""
],
"FalseyCellValue": "",
"FalseyCellValueSynonyms": [
""
]
},
"TimeGranularity": "SECOND",
"AllowedAggregations": [
"COUNT"
],
"NotAllowedAggregations": [
"COUNT"
],
"DefaultFormatting": {
"DisplayFormat": "AUTO",
"DisplayFormatOptions": {
"UseBlankCellFormat": true,
"BlankCellFormat": "",
"DateFormat": "",
"DecimalSeparator": "COMMA",
"GroupingSeparator": "",
"UseGrouping": true,
"FractionDigits": 0,
"Prefix": "",
"Suffix": "",
"UnitScaler": "NONE",
"NegativeFormat": {
"Prefix": "",
"Suffix": ""
},
"CurrencySymbol": ""
}
},
"NeverAggregateInFilter": true,
"CellValueSynonyms": [
{
"CellValue": "",
"Synonyms": [
""
]
}
],
"NonAdditive": true
}
],
"CalculatedFields": [
{
"CalculatedFieldName": "",
"CalculatedFieldDescription": "",
"Expression": "",
"CalculatedFieldSynonyms": [
""
],
"IsIncludedInTopic": true,
"DisableIndexing": true,
"ColumnDataRole": "DIMENSION",
"TimeGranularity": "SECOND",
"DefaultFormatting": {
"DisplayFormat": "AUTO",
"DisplayFormatOptions": {
"UseBlankCellFormat": true,
"BlankCellFormat": "",
"DateFormat": "",
"DecimalSeparator": "COMMA",
"GroupingSeparator": "",
"UseGrouping": true,
"FractionDigits": 0,
"Prefix": "",
"Suffix": "",
"UnitScaler": "NONE",
"NegativeFormat": {
"Prefix": "",
"Suffix": ""
},
"CurrencySymbol": ""
}
},
"Aggregation": "SUM",
"ComparativeOrder": {
"UseOrdering": "GREATER_IS_BETTER",
"SpecifedOrder": [
""
],
"TreatUndefinedSpecifiedValues": "LEAST"
},
"SemanticType": {
"TypeName": "",
"SubTypeName": "",
"TypeParameters": {
"KeyName": ""
},
"TruthyCellValue": "",
"TruthyCellValueSynonyms": [
""
],
"FalseyCellValue": "",
"FalseyCellValueSynonyms": [
""
]
},
"AllowedAggregations": [
"COUNT"
],
"NotAllowedAggregations": [
"COUNT"
],
"NeverAggregateInFilter": true,
"CellValueSynonyms": [
{
"CellValue": "",
"Synonyms": [
""
]
}
],
"NonAdditive": true
}
],
"NamedEntities": [
{
"EntityName": "",
"EntityDescription": "",
"EntitySynonyms": [
""
],
"SemanticEntityType": {
"TypeName": "",
"SubTypeName": "",
"TypeParameters": {
"KeyName": ""
}
},
"Definition": [
{
"FieldName": "",
"PropertyName": "",
"PropertyRole": "PRIMARY",
"PropertyUsage": "INHERIT",
"Metric": {
"Aggregation": "SUM",
"AggregationFunctionParameters": {
"KeyName": ""
}
}
}
]
}
]
}
],
"ConfigOptions": {
"QBusinessInsightsEnabled": true
}
}
}
~ $
JSON のひな形が表示されました。長いですね。
これを JSON ファイルとして保存します。ファイル名は何でもよいですが、今回は update-topic-included-off.json
としました。
aws quicksight update-topic --generate-cli-skeleton > update-topic-included-off.json
▼実行結果
~ $ aws quicksight update-topic --generate-cli-skeleton > update-topic-included-off.json
~ $
ls
コマンドでファイルが作成されたことを確認します。
▼実行結果
~ $ ls
update-topic-included-off.json
~ $
ありますね。
cat
コマンドでファイルの中身を確認します。
cat update-topic-included-off.json
実行結果
~ $ cat update-topic-included-off.json
{
"AwsAccountId": "",
"TopicId": "",
"Topic": {
"Name": "",
"Description": "",
"UserExperienceVersion": "LEGACY",
"DataSets": [
{
"DatasetArn": "",
"DatasetName": "",
"DatasetDescription": "",
"DataAggregation": {
"DatasetRowDateGranularity": "SECOND",
"DefaultDateColumnName": ""
},
"Filters": [
{
"FilterDescription": "",
"FilterClass": "ENFORCED_VALUE_FILTER",
"FilterName": "",
"FilterSynonyms": [
""
],
"OperandFieldName": "",
"FilterType": "CATEGORY_FILTER",
"CategoryFilter": {
"CategoryFilterFunction": "EXACT",
"CategoryFilterType": "CUSTOM_FILTER",
"Constant": {
"ConstantType": "SINGULAR",
"SingularConstant": "",
"CollectiveConstant": {
"ValueList": [
""
]
}
},
"Inverse": true
},
"NumericEqualityFilter": {
"Constant": {
"ConstantType": "SINGULAR",
"SingularConstant": ""
},
"Aggregation": "NO_AGGREGATION"
},
"NumericRangeFilter": {
"Inclusive": true,
"Constant": {
"ConstantType": "SINGULAR",
"RangeConstant": {
"Minimum": "",
"Maximum": ""
}
},
"Aggregation": "NO_AGGREGATION"
},
"DateRangeFilter": {
"Inclusive": true,
"Constant": {
"ConstantType": "SINGULAR",
"RangeConstant": {
"Minimum": "",
"Maximum": ""
}
}
},
"RelativeDateFilter": {
"TimeGranularity": "SECOND",
"RelativeDateFilterFunction": "PREVIOUS",
"Constant": {
"ConstantType": "SINGULAR",
"SingularConstant": ""
}
}
}
],
"Columns": [
{
"ColumnName": "",
"ColumnFriendlyName": "",
"ColumnDescription": "",
"ColumnSynonyms": [
""
],
"ColumnDataRole": "DIMENSION",
"Aggregation": "SUM",
"IsIncludedInTopic": true,
"DisableIndexing": true,
"ComparativeOrder": {
"UseOrdering": "GREATER_IS_BETTER",
"SpecifedOrder": [
""
],
"TreatUndefinedSpecifiedValues": "LEAST"
},
"SemanticType": {
"TypeName": "",
"SubTypeName": "",
"TypeParameters": {
"KeyName": ""
},
"TruthyCellValue": "",
"TruthyCellValueSynonyms": [
""
],
"FalseyCellValue": "",
"FalseyCellValueSynonyms": [
""
]
},
"TimeGranularity": "SECOND",
"AllowedAggregations": [
"COUNT"
],
"NotAllowedAggregations": [
"COUNT"
],
"DefaultFormatting": {
"DisplayFormat": "AUTO",
"DisplayFormatOptions": {
"UseBlankCellFormat": true,
"BlankCellFormat": "",
"DateFormat": "",
"DecimalSeparator": "COMMA",
"GroupingSeparator": "",
"UseGrouping": true,
"FractionDigits": 0,
"Prefix": "",
"Suffix": "",
"UnitScaler": "NONE",
"NegativeFormat": {
"Prefix": "",
"Suffix": ""
},
"CurrencySymbol": ""
}
},
"NeverAggregateInFilter": true,
"CellValueSynonyms": [
{
"CellValue": "",
"Synonyms": [
""
]
}
],
"NonAdditive": true
}
],
"CalculatedFields": [
{
"CalculatedFieldName": "",
"CalculatedFieldDescription": "",
"Expression": "",
"CalculatedFieldSynonyms": [
""
],
"IsIncludedInTopic": true,
"DisableIndexing": true,
"ColumnDataRole": "DIMENSION",
"TimeGranularity": "SECOND",
"DefaultFormatting": {
"DisplayFormat": "AUTO",
"DisplayFormatOptions": {
"UseBlankCellFormat": true,
"BlankCellFormat": "",
"DateFormat": "",
"DecimalSeparator": "COMMA",
"GroupingSeparator": "",
"UseGrouping": true,
"FractionDigits": 0,
"Prefix": "",
"Suffix": "",
"UnitScaler": "NONE",
"NegativeFormat": {
"Prefix": "",
"Suffix": ""
},
"CurrencySymbol": ""
}
},
"Aggregation": "SUM",
"ComparativeOrder": {
"UseOrdering": "GREATER_IS_BETTER",
"SpecifedOrder": [
""
],
"TreatUndefinedSpecifiedValues": "LEAST"
},
"SemanticType": {
"TypeName": "",
"SubTypeName": "",
"TypeParameters": {
"KeyName": ""
},
"TruthyCellValue": "",
"TruthyCellValueSynonyms": [
""
],
"FalseyCellValue": "",
"FalseyCellValueSynonyms": [
""
]
},
"AllowedAggregations": [
"COUNT"
],
"NotAllowedAggregations": [
"COUNT"
],
"NeverAggregateInFilter": true,
"CellValueSynonyms": [
{
"CellValue": "",
"Synonyms": [
""
]
}
],
"NonAdditive": true
}
],
"NamedEntities": [
{
"EntityName": "",
"EntityDescription": "",
"EntitySynonyms": [
""
],
"SemanticEntityType": {
"TypeName": "",
"SubTypeName": "",
"TypeParameters": {
"KeyName": ""
}
},
"Definition": [
{
"FieldName": "",
"PropertyName": "",
"PropertyRole": "PRIMARY",
"PropertyUsage": "INHERIT",
"Metric": {
"Aggregation": "SUM",
"AggregationFunctionParameters": {
"KeyName": ""
}
}
}
]
}
]
}
],
"ConfigOptions": {
"QBusinessInsightsEnabled": true
}
}
}
~ $
ファイルの中身もちゃんと保存されていますね。
update-topic-included-off.json を編集
以下のように update-topic-included-off.json
を編集していきます。
私は一旦 Visual Studio Code を使って手元で編集しました。
"AwsAccountId"
、"TopicId"
、"Topic"
、"Columns"
などの項目は describe-topic コマンドの結果からコピー&ペースト"Filters"
は削除(今回は設定していない)- 各フィールドごとに
"IsIncludedInTopic"
という設定項目があるので、それをfalse
に設定 "CalculatedFields"
は削除(今回は設定していない)"NamedEntities"
は削除(今回は設定していない)
{
"AwsAccountId": "123456789012",
"TopicId": "G7NAH7CCmx2csyB9gMrGbKxAZoOcsEhu",
"Topic": {
"Name": "sweets_with_status",
"Description": "sweets_with_status",
"UserExperienceVersion": "NEW_READER_EXPERIENCE",
"DataSets": [
{
"DatasetArn": "arn:aws:quicksight:us-east-1:123456789012:dataset/40e73fba-718c-4ede-b791-df32268bf966",
"DatasetName": "Sweets With Status",
"DataAggregation": {
"DefaultDateColumnName": "datetime"
},
"Columns": [
{
"ColumnName": "datetime",
"ColumnFriendlyName": "Datetime",
"ColumnDescription": "",
"ColumnSynonyms": [
"date",
"time"
],
"ColumnDataRole": "DIMENSION",
"IsIncludedInTopic": false,
"SemanticType": {
"TypeName": "Date"
},
"NeverAggregateInFilter": false
},
{
"ColumnName": "department",
"ColumnFriendlyName": "Department",
"ColumnDescription": "",
"ColumnSynonyms": [
"division"
],
"ColumnDataRole": "DIMENSION",
"IsIncludedInTopic": false,
"NeverAggregateInFilter": false
},
{
"ColumnName": "section",
"ColumnFriendlyName": "Section",
"ColumnDescription": "",
"ColumnSynonyms": [
"segment"
],
"ColumnDataRole": "DIMENSION",
"IsIncludedInTopic": false,
"NeverAggregateInFilter": false
},
{
"ColumnName": "status",
"ColumnFriendlyName": "Status",
"ColumnDescription": "",
"ColumnSynonyms": [],
"ColumnDataRole": "DIMENSION",
"IsIncludedInTopic": false,
"NeverAggregateInFilter": false
},
{
"ColumnName": "chocolate",
"ColumnFriendlyName": "Chocolate",
"ColumnDescription": "",
"ColumnSynonyms": [
"cacao",
"candy",
"cocoa"
],
"ColumnDataRole": "MEASURE",
"IsIncludedInTopic": false,
"NeverAggregateInFilter": false
},
{
"ColumnName": "donut",
"ColumnFriendlyName": "Donut",
"ColumnDescription": "",
"ColumnSynonyms": [
"doughnut",
"muffin"
],
"ColumnDataRole": "MEASURE",
"IsIncludedInTopic": false,
"NeverAggregateInFilter": false
},
{
"ColumnName": "osenbei",
"ColumnFriendlyName": "Osenbei",
"ColumnDescription": "",
"ColumnSynonyms": [
"osen"
],
"ColumnDataRole": "MEASURE",
"IsIncludedInTopic": false,
"NeverAggregateInFilter": false
}
]
}
],
"ConfigOptions": {
"QBusinessInsightsEnabled": true
}
}
}
手元の VSCode で JSON を編集できました。
では、update-topic-included-off.json
を vim で編集します。
CLI スケルトンを使って JSON 形式でパラメーター設定する で詳細な vim での編集方法をキャプチャ付きで記載していますのでご参照ください。
vim
コマンドでファイルを開きます。
▼実行結果
~ $ vim update-topic-included-off.json
~ $
:%d
と入力して Enter キーを押し全行を削除:set paste
と入力して Enter キーを押し貼り付けモードにするi
を押下して編集モードするi
を押下すると画面下部に--INSERT (paste)--
と表示される
- 編集した JSON を貼り付ける
esc
キーを押下して編集モードを抜ける:wq
と入力して Enter キーを押し保存して終了
ファイルが編集できたら cat
コマンドでファイルが保存できているか確認します。
cat update-topic-included-off.json
実行結果
~ $ cat update-topic-included-off.json
{
"AwsAccountId": "123456789012",
"TopicId": "G7NAH7CCmx2csyB9gMrGbKxAZoOcsEhu",
"Topic": {
"Name": "sweets_with_status",
"Description": "sweets_with_status",
"UserExperienceVersion": "NEW_READER_EXPERIENCE",
"DataSets": [
{
"DatasetArn": "arn:aws:quicksight:us-east-1:123456789012:dataset/40e73fba-718c-4ede-b791-df32268bf966",
"DatasetName": "Sweets With Status",
"DataAggregation": {
"DefaultDateColumnName": "datetime"
},
"Columns": [
{
"ColumnName": "datetime",
"ColumnFriendlyName": "Datetime",
"ColumnDescription": "",
"ColumnSynonyms": [
"date",
"time"
],
"ColumnDataRole": "DIMENSION",
"IsIncludedInTopic": false,
"SemanticType": {
"TypeName": "Date"
},
"NeverAggregateInFilter": false
},
{
"ColumnName": "department",
"ColumnFriendlyName": "Department",
"ColumnDescription": "",
"ColumnSynonyms": [
"division"
],
"ColumnDataRole": "DIMENSION",
"IsIncludedInTopic": false,
"NeverAggregateInFilter": false
},
{
"ColumnName": "section",
"ColumnFriendlyName": "Section",
"ColumnDescription": "",
"ColumnSynonyms": [
"segment"
],
"ColumnDataRole": "DIMENSION",
"IsIncludedInTopic": false,
"NeverAggregateInFilter": false
},
{
"ColumnName": "status",
"ColumnFriendlyName": "Status",
"ColumnDescription": "",
"ColumnSynonyms": [],
"ColumnDataRole": "DIMENSION",
"IsIncludedInTopic": false,
"NeverAggregateInFilter": false
},
{
"ColumnName": "chocolate",
"ColumnFriendlyName": "Chocolate",
"ColumnDescription": "",
"ColumnSynonyms": [
"cacao",
"candy",
"cocoa"
],
"ColumnDataRole": "MEASURE",
"IsIncludedInTopic": false,
"NeverAggregateInFilter": false
},
{
"ColumnName": "donut",
"ColumnFriendlyName": "Donut",
"ColumnDescription": "",
"ColumnSynonyms": [
"doughnut",
"muffin"
],
"ColumnDataRole": "MEASURE",
"IsIncludedInTopic": false,
"NeverAggregateInFilter": false
},
{
"ColumnName": "osenbei",
"ColumnFriendlyName": "Osenbei",
"ColumnDescription": "",
"ColumnSynonyms": [
"osen"
],
"ColumnDataRole": "MEASURE",
"IsIncludedInTopic": false,
"NeverAggregateInFilter": false
}
]
}
],
"ConfigOptions": {
"QBusinessInsightsEnabled": true
}
}
}
~ $
保存できていますね。
update-topic コマンドでトピックを更新する
では、update-topic コマンドでトピックを更新します。
--cli-input-json
パラメーターで作成した JSON ファイルを指定します。
aws quicksight update-topic \
--cli-input-json file://update-topic-included-off.json
▼実行結果
~ $ aws quicksight update-topic \
> --cli-input-json file://update-topic-included-off.json
{
"Status": 200,
"TopicId": "G7NAH7CCmx2csyB9gMrGbKxAZoOcsEhu",
"Arn": "arn:aws:quicksight:us-east-1:123456789012:topic/G7NAH7CCmx2csyB9gMrGbKxAZoOcsEhu",
"RefreshArn": "arn:aws:quicksight:us-east-1:123456789012:topic/G7NAH7CCmx2csyB9gMrGbKxAZoOcsEhu/refresh/1739421560820",
"RequestId": "69dc9ec4-db1e-4a96-8a65-70cdcea45e81"
}
~ $
"Status": 200,
となっており、コマンドは成功しました。QuickSight コンソールからトピックを確認します。
ブラウザを更新すると、以下のように Include がすべてオフになっていることが確認できました。
Include を一括で ON にするには "IsIncludedInTopic"
を true
に設定すれば OK です。
注意:DATA FIELDS を更新するとインデックスが更新される
DATA FIELDS を更新するとインデックスが更新されます。
Indexing Dataset
Q is indexing your data fields, they will not be available for questions until indexing is complete. Meanwhile, you can review and edit field settings in data tab or monitor status here.
(日本語訳)
データセットのインデックス作成
Qがデータフィールドをインデックス化しています。インデックス作成が完了するまで、質問には使用できません。その間、データタブでフィールド設定を確認および編集するか、ここでステータスを監視できます。
インデックスはトピック内のデータの定義などを保存していて、ユーザーからは直接見えません。
注意書きの通り、インデックスの更新中は質問ができません。
インデックスの構築時間はトピックに含まれる項目が多ければ多いほど時間がかかります。
実際に運用する際は DATA FIELDS の更新のタイミングや本当に実施するかどうかを検討の上実施ください。
ちなみに今回のデータ量だと数秒で終わることが多かったのですが、インデックス更新中に再度更新をかけると、インデックス更新が終わらなくなってしまい、数時間待ったのちに更新をキャンセルした……ということが一度ありました。
おわりに
シノニムの一括設定もやりたかったのですが、字数制限に引っかかってしまったので別記事で記載します。
もう少し設定を簡略化するには、例えば Lambda 関数などで AWS SDK (boto3) を使用して DescribeTopic API を呼び出し、取得した JSON の IsIncludedInTopic
を true
に変更し、更新された JSON を返すような開発をすればよいのかなと思います。
本記事への質問やご要望については画面下部のお問い合わせ「DevelopersIO について」からご連絡ください。記事に関してお問い合わせいただけます。
参考