雪花是否保留检索顺序?

时间:2020-10-14 14:55:46

标签: sql snowflake-cloud-data-platform

发布两个问题: 1。 假设有一个查询: SELECT C1, C2, C3 from TABLE;

首次触发此查询时,它将以特定顺序检索所有值。

下次触发相同的查询时,是否会保留以前的顺序?

  1. 有2个表TABLE1和TABLE2,它们都有相同的数据。

({SELECT * from TABLE1)和(SELECT * from TABLE1)会检索相同顺序的行吗?

3 个答案:

答案 0 :(得分:1)

SQL表表示无序集。期。除非您明确包含ORDER BY,否则结果集中没有排序。

就是这么简单。如果要按特定顺序排列数据,则需要使用ORDER BY。关系数据库就是这样工作的。

每次执行查询时,同一查询可以按不同顺序返回结果。没有关于顺序的保证-除非查询的最外面的ORDER BY有一个SELECT

答案 1 :(得分:1)

  1. 否,除非您要从结果缓存中获取数据!
  2. 否,除非它们是非常小的表并且您的查询以低并行度运行。

很抱歉,您可以得到额外的答案,但是我发现Tim声称只要基础表未修改且查询具有相同的执行计划,该查询将返回相同的结果。

雪花并行执行查询,因此除非使用ORDER BY,否则数据的顺序是不可预测的。

我们创建一个表(足够大以并行处理),然后运行一个简单的测试用例:

-- running on medium warehouse

create or replace table my_test_table ( id number, name varchar ) as
select seq4(), 'gokhan' || seq4() from table(generator(rowcount=>1000000000));

alter session set USE_CACHED_RESULT = false;

select * from my_test_table  limit 10;

您会看到,每次运行它都会返回不同的行。

答案 2 :(得分:0)

要简短回答两个问题:否。

如果您的查询没有ORDER BY子句,则SELECT语句始终返回无序集。这意味着:即使您查询同一张表两次并且数据没有更改,没有ORDER BY的SELECT也可以检索不同的行顺序。

https://docs.snowflake.com/en/sql-reference/sql/select.html