SxT 中的视图
空间和时间当前支持三种类型的视图。
-
标准 - 标准视图是基于 SQL 语句执行结果的虚拟表。标准视图不保存 SQL 语句生成的数据。当您查询标准视图时,会执行底层 SQL 语句,并将结果显示为真实的表。
-
物化- 与标准视图不同,物化视图保存执行基础查询的结果。物化视图可以按用户定义的时间间隔刷新,每次执行基础查询时都会保存新数据。
-
参数化- 参数化视图类似于标准视图,不同之处在于它可以采用针对视图执行查询时提供的附加参数。
如何在 SxT 中创建视图
-
视图是使用与在空间和时间中创建表相同的配置资源 (DDL)端点创建的。
-
至少,您必须为正在创建视图的资源 ID 提供具有 CREATE 权限的 Biscuit。如果您的查询运行所针对的基础表是使用权限创建的,则此方法有效。如果您的视图将查询的表是,那么您还需要为基础表提供具有适当权限的 Biscuit 。
access_type=public_readaccess_type=permissionedSELECT
创建标准视图
cURL
curl -i --request POST \
--url "https://<API_URL>/v1/sql/ddl" \\ --header "accept: application/json" \\ --header "authorization: Bearer <ACCESS_TOKEN>" \\ --header "content-type: application/json" \\ --data '
{
"biscuits": ["EuwBCoEBCg5zeHQ6Y2Fw..."],
"sqlText": "CREATE VIEW SE_LAND.my_new_view WITH \\"public_key=<BISCUIT_PUBLIC_KEY>\\" AS SELECT \* FROM SE_LAND.ofac_eth"
}
'
-
下面仔细看看我们正在执行的 SQL:
-
视图名称为,其完整资源ID为my_new_viewSE_LAND.my_new_view
-
基础表是,其完整的resourceId是ofac_ethSE_LAND.ofac_eth
-
这是用于授予权限的密钥对的饼干公钥一侧。 也就是说,与包含此事实的饼干关联的饼干公钥:public_keycreate
sxt:capability("ddl_create", "se_land.my_new_view");
-
如果基础表 ( ) 是这样创建的,那么您还需要向创建命令提供一个饼干,其中包含以下事实:
sxt:capability("dql_select", "se_land.ofac_eth");
创建物化视图
材质视图可以用几乎相同的方式创建。有一项是必需的差异,另一项是可选的。
首先,您必须告诉 SxT 您想要创建一个物化视图。这就像添加到 SQL CREATE 命令一样简单,如下所示:MATERIALIZED
下一个标志是可选的,允许您设置查询的时间(以分钟为单位)。刷新间隔定义了后端执行查询的频率。refresh_interval
-
目前,物化视图被硬编码为每天刷新一次。在短期内,这将更改为使用刷新间隔,因此强烈建议设置为所需的长度(或 1440 = 分钟每天)
-
材质视图的 access_type 直接从基础表派生,不需要在 create 语句中指定。
-
指定的饼干公钥仅用于针对物化视图的 DDL(创建和删除)操作。
创建参数化视图
参数化视图与标准视图类似,不同之处在于它可以采用针对视图执行查询时提供的附加参数。因此,当我们创建视图时,我们也会定义参数。
cURL
curl --location '
/v1/sql/ddl' \ --header 'Content-Type: application/json' \
--header 'Authorization: Bearer ACCESS_TOKEN' \
--data '{
"biscuits": \[ "<BISCUIT-WITH-CREATE-PERMS>" \],
"sqlText": "CREATE PARAMETERIZED VIEW se_land.my_new_para_view WITH \"public_key=
\" AS SELECT * FROM se_land.dnft_42 WHERE POINTS>@param1" }'
我们来看看SQL:
如您所见,我们用 指定参数。@param1
查询视图
查询视图的方式与查询任何其他表的方式相同。
-
标准
SELECT * FROM SE_LAND.my_new_view
-
物化
SELECT * FROM SE_LAND.my_new_mat_view
-
参数化
-
SELECT * FROM SE_LAND.my_new_para_view('param1=4')
或具有多个参数: -
SELECT * FROM SE_LAND.my_new_para_view('param1=10','param2=20')
删除视图:
请注意,应该是完整的资源 ID。例如,
VIEW_NAMESE_LAND.my_new_para_view
DROP VIEW <VIEW_NAME>
DROP MATERIALIZED VIEW <VIEW_NAME>
DROP PARAMETERIZED VIEW <VIEW_NAME>
-
评论 (0)