Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Ограничения первичного ключа, которые фиксируют связи между полями в таблицах, могут помочь пользователям и средствам понять связи в данных. В этой статье содержатся примеры, показывающие, как использовать первичные ключи с параметром RELY
для оптимизации некоторых распространенных типов запросов.
Заметка
Оптимизации запросов, связанные с командой RELY
, требуют выполнения запросов на вычислительных ресурсах с поддержкой Photon. См. статью " Что такое Фотон?". Фотона выполняется по умолчанию в хранилищах SQL и бессерверных вычислительных ресурсах для записных книжек и рабочих процессов. Дополнительные сведения о Фотоне см. в статье "Что такое Photon?".
:::
:::
Добавление ограничений первичного ключа
Вы можете добавить ограничение первичного ключа в инструкцию создания таблицы, как показано в следующем примере, или добавить ограничение в таблицу с помощью предложения ADD CONSTRAINT
.
CREATE TABLE customer (
c_customer_sk int,
PRIMARY KEY (c_customer_sk)
...
)
В этом примере c_customer_sk
используется ключ идентификатора клиента. Ограничение первичного ключа указывает, что каждое значение идентификатора клиента должно быть уникальным в таблице. Azure Databricks не применяет ограничения ключей. Их можно проверить с помощью существующего конвейера данных или ETL. См. Управление качеством данных с помощью ожиданий конвейера, чтобы узнать об ожиданиях при работе с таблицами потоковой обработки и материализованными представлениями.
Сведения об ограничениях в таблицах Delta в Azure Databricks см. в, чтобы узнать о работе с ними.
Заметка
Это ответственность пользователя за проверку того, соответствует ли ограничение. Использование ограничения, которое не удовлетворено, может привести к неправильным результатам запроса.
Использование RELY
для включения оптимизации
Если вы знаете, что ограничение первичного ключа допустимо, вы можете включить оптимизацию, основанную на ограничении, указав его с параметром RELY
. Полный синтаксис см. в предложении
Параметр RELY
позволяет Azure Databricks использовать ограничение для перезаписи запросов. Следующие оптимизации можно выполнить только в том случае, если RELY
параметр указан в предложении ADD CONSTRAINT
или ALTER TABLE
инструкции.
С помощью ALTER TABLE
можно изменить первичный ключ таблицы, чтобы включить параметр RELY
, как показано в следующем примере.
ALTER TABLE
customer DROP PRIMARY KEY;
ALTER TABLE
customer
ADD
PRIMARY KEY (c_customer_sk) RELY;
Примеры оптимизации
Следующие примеры расширяют предыдущий пример, который создает таблицу customer
, в которой c_customer_sk
является проверенным уникальным идентификатором с именем PRIMARY KEY
с указанным параметром RELY
.
Пример 1. Устранение ненужных агрегатов
Ниже показан запрос, который применяет DISTINCT
операцию к первичному ключу.
SELECT
DISTINCT c_customer_sk
FROM
customer;
Так как столбец c_customer_sk
является проверенным ограничением PRIMARY KEY
, все значения в столбце уникальны. Если указан параметр RELY
, Azure Databricks может оптимизировать запрос, не выполняя операцию DISTINCT
.
Пример 2. Устранение ненужных соединений
В следующем примере показан запрос, в котором Azure Databricks может исключить ненужное соединение.
Запрос присоединяет таблицу фактов, store_sales
с таблицей измерений, customer
. Он выполняет левое внешнее соединение, поэтому результат запроса включает все записи из таблицы store_sales
и соответствующие записи из таблицы customer
. Если в таблице customer
отсутствует соответствующая запись, в результате запроса в столбце NULL
отображается значение c_customer_sk
.
SELECT
SUM(ss_quantity)
FROM
store_sales ss
LEFT JOIN customer c ON ss.customer_sk = c.c_customer_sk;
Чтобы понять, почему это соединение не требуется, рассмотрите инструкцию запроса. Для этого требуется только столбец ss_quantity
из таблицы store_sales
. Таблица customer
присоединена к первичному ключу, поэтому каждая строка store_sales
соответствует не более одной строке в customer
. Так как операция является внешним соединением, все записи из таблицы store_sales
сохраняются, поэтому соединение не изменяет данные из этой таблицы. Агрегирование SUM
не изменяется независимо от того, соединены ли эти таблицы или нет.
Использование ограничения первичного ключа с RELY
дает оптимизатору запросов сведения, необходимые для устранения соединения. Оптимизированный запрос выглядит следующим образом:
SELECT
SUM(ss_quantity)
FROM
store_sales ss
Следующие шаги
См. просмотр схемы связей сущностей, чтобы узнать, как изучить связи первичного ключа и внешнего ключа в пользовательском интерфейсе обозревателя каталогов.