【问题标题】:Find count of rows of previous executed query in snowflake在雪花中查找先前执行的查询的行数
【发布时间】:2021-08-12 06:14:33
【问题描述】:

就像在 MySQL 中一样,使用

SELECT SQL_CALC_FOUND_ROWS from tablename limit 10

然后使用

SELECT FOUND_ROWS() as rows

知道最后执行的查询的行数。

Snowflake 中是否有任何类似的功能/方式,我可以从中找到先前执行的查询的行数?

注意:- FOUND_ROWS() 返回总计数(忽略限制子句)。所以我正在寻找一个忽略限制子句并返回雪花总数的解决方案

注意:- 我不想使用count(*)

更新

在我这边使用count(*) 添加蛮力解决方案

$sql = select * from tablename limit 10;

使用正则表达式/任何其他方法我删除了限制部分

所以我的查询变成了

$sql_count = select * from tablename

最后,在雪花中执行下面的查询,从而得到我想要的结果

$res = select count(*) from ($sql_count)

注意:-我知道这不是标准方式,也不想要这种方法,但我暂时在我的项目中使用它

【问题讨论】:

  • 试过了...但不能从雪花 UI 端工作...我认为这只支持 SnowSQL 即 cli 端

标签: snowflake-cloud-data-platform


【解决方案1】:

您可以结合使用 last_query_id() 和 INFORMATION_SCHEMA.QUERY_HISTORY 函数上的查询。

类似

select SQL_CALC_FOUND_ROWS from tablename limit 10;
select ROWS_PRODUCED
from table(information_schema.query_history())
where QUERY_ID=(last_query_id());

【讨论】:

  • SQL_CALC_FOUND_ROWS 在雪花中不起作用,并且您的第二个查询返回最后执行的查询的行数。就像我在查询中使用限制 10 一样,它只会返回 10 作为输出......不是没有限制 10 的总计数
  • 我的错,我认为 SQL_CALC_FOUND_ROWS 是一个有效的列名,但它是一个未来不推荐使用的函数,请参阅:link。在任何情况下,您要尝试做的事情都依赖于这样一个事实,即某些 RDBMS 系统到 FTS 甚至是带有 LIMIT 的简单查询,现在情况不再如此,因此这种方法不起作用。使用 count(*) 是一个有效的选项,因为 SnowFlake 可能会依赖表元数据而不是实际读取整个表。
猜你喜欢
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2022-01-04
  • 2020-08-19
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多