התצוגה SEARCH_INDEX_COLUMNS
התצוגה INFORMATION_SCHEMA.SEARCH_INDEX_COLUMNS מכילה שורה אחת לכל עמודה שמופיעה באינדקס לחיפוש בכל טבלה בקבוצת נתונים.
ההרשאות הנדרשות
כדי לראות את המטא-נתונים של אינדקס החיפוש, צריך לקבל את ההרשאה bigquery.tables.get או bigquery.tables.list לניהול זהויות והרשאות גישה (IAM) בטבלה עם האינדקס. כל אחד מתפקידי ה-IAM המוגדרים מראש הבאים כולל לפחות אחת מההרשאות האלה:
roles/bigquery.adminroles/bigquery.dataEditorroles/bigquery.dataOwnerroles/bigquery.dataViewerroles/bigquery.metadataViewerroles/bigquery.user
מידע נוסף על הרשאות ב-BigQuery זמין במאמר בקרת גישה באמצעות IAM.
סכימה
כשמריצים שאילתה בתצוגהINFORMATION_SCHEMA.SEARCH_INDEX_COLUMNS, התוצאות של השאילתה מכילות שורה אחת לכל עמודה עם אינדקס בכל טבלה בקבוצת נתונים.
לתצוגה INFORMATION_SCHEMA.SEARCH_INDEX_COLUMNS יש את הסכימה הבאה:
| שם העמודה | סוג נתונים | ערך | |
|---|---|---|---|
index_catalog |
STRING |
שם הפרויקט שמכיל את מערך הנתונים. | |
index_schema |
STRING |
השם של מערך הנתונים שמכיל את האינדקס. | |
table_name |
STRING |
השם של טבלת הבסיס שעליה נוצר האינדקס. | |
index_name |
STRING |
שם האינדקס. | |
index_column_name |
STRING |
השם של העמודה המאונדקסת ברמה העליונה. | |
index_field_path |
STRING |
הנתיב המלא של השדה המורחב שנוסף לאינדקס, שמתחיל בשם העמודה. השדות מופרדים באמצעות נקודה. |
כדי לשמור על יציבות, מומלץ לציין במפורש את העמודות בשאילתות של סכימת המידע, במקום להשתמש בתו כל כללי (SELECT *). ציון מפורש של העמודות מונע את השבירה של השאילתות אם הסכימה הבסיסית משתנה.
היקף ותחביר
שאילתות שמופעלות על התצוגה הזו צריכות לכלול מזהה מערך נתונים. בטבלה הבאה מוסבר היקף האזור בתצוגה הזו:
| שם התצוגה המפורטת | היקף המשאבים | היקף האזור |
|---|---|---|
[PROJECT_ID.]DATASET_ID.INFORMATION_SCHEMA.SEARCH_INDEX_COLUMNS |
רמת מערך הנתונים | מיקום מערך הנתונים |
-
אופציונלי:
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . אם לא מציינים פרויקט, המערכת משתמשת בפרויקט שמוגדר כברירת מחדל. -
DATASET_ID: המזהה של מערך הנתונים. מידע נוסף מופיע במאמר בנושא מאפיין מסנן של מערך נתונים.
דוגמה
-- Returns metadata for search indexes in a single dataset.
SELECT * FROM myDataset.INFORMATION_SCHEMA.SEARCH_INDEX_COLUMNS;
דוגמאות
בדוגמה הבאה נוצר אינדקס חיפוש בכל העמודות של my_table.
CREATE TABLE dataset.my_table( a STRING, b INT64, c STRUCT <d INT64, e ARRAY<STRING>, f STRUCT<g STRING, h INT64>>) AS SELECT 'hello' AS a, 10 AS b, (20, ['x', 'y'], ('z', 30)) AS c; CREATE SEARCH INDEX my_index ON dataset.my_table(ALL COLUMNS);
השאילתה הבאה מחלצת מידע על השדות שמתווספים לאינדקס.
הסמל index_field_path מציין איזה שדה בעמודה עבר אינדוקס. ההבדל בין index_column_name לבין STRUCT הוא רק במקרה של STRUCT, שבו מצוין הנתיב המלא לשדה שנוסף לאינדקס. בדוגמה הזו, עמודה c מכילה שדה ARRAY<STRING> בשם e ועוד שדה STRUCT בשם f שמכיל שדה STRING בשם g. כל אחד מהשדות האלה עובר אינדוקס.
SELECT table_name, index_name, index_column_name, index_field_path
FROM my_project.dataset.INFORMATION_SCHEMA.SEARCH_INDEX_COLUMNS
התוצאה אמורה להיראות כך:
+------------+------------+-------------------+------------------+ | table_name | index_name | index_column_name | index_field_path | +------------+------------+-------------------+------------------+ | my_table | my_index | a | a | | my_table | my_index | c | c.e | | my_table | my_index | c | c.f.g | +------------+------------+-------------------+------------------+
השאילתה הבאה מצטרפת לתצוגה INFORMATION_SCHEMA.SEARCH_INDEX_COUMNS עם התצוגות INFORMATION_SCHEMA.SEARCH_INDEXES ו-INFORMATION_SCHEMA.COLUMNS כדי לכלול את סטטוס האינדקס של החיפוש ואת סוג הנתונים של כל עמודה:
SELECT index_columns_view.index_catalog AS project_name, index_columns_view.index_SCHEMA AS dataset_name, indexes_view.TABLE_NAME AS table_name, indexes_view.INDEX_NAME AS index_name, indexes_view.INDEX_STATUS AS status, index_columns_view.INDEX_COLUMN_NAME AS column_name, index_columns_view.INDEX_FIELD_PATH AS field_path, columns_view.DATA_TYPE AS data_type FROM mydataset.INFORMATION_SCHEMA.SEARCH_INDEXES indexes_view INNER JOIN mydataset.INFORMATION_SCHEMA.SEARCH_INDEX_COLUMNS index_columns_view ON indexes_view.TABLE_NAME = index_columns_view.TABLE_NAME AND indexes_view.INDEX_NAME = index_columns_view.INDEX_NAME LEFT OUTER JOIN mydataset.INFORMATION_SCHEMA.COLUMNS columns_view ON indexes_view.INDEX_CATALOG = columns_view.TABLE_CATALOG AND indexes_view.INDEX_SCHEMA = columns_view.TABLE_SCHEMA AND index_columns_view.TABLE_NAME = columns_view.TABLE_NAME AND index_columns_view.INDEX_COLUMN_NAME = columns_view.COLUMN_NAME ORDER BY project_name, dataset_name, table_name, column_name;
התוצאה אמורה להיראות כך:
+------------+------------+----------+------------+--------+-------------+------------+---------------------------------------------------------------+ | project | dataset | table | index_name | status | column_name | field_path | data_type | +------------+------------+----------+------------+--------+-------------+------------+---------------------------------------------------------------+ | my_project | my_dataset | my_table | my_index | ACTIVE | a | a | STRING | | my_project | my_dataset | my_table | my_index | ACTIVE | c | c.e | STRUCT<d INT64, e ARRAY<STRING>, f STRUCT<g STRING, h INT64>> | | my_project | my_dataset | my_table | my_index | ACTIVE | c | c.f.g | STRUCT<d INT64, e ARRAY<STRING>, f STRUCT<g STRING, h INT64>> | +------------+------------+----------+------------+--------+-------------+------------+---------------------------------------------------------------+