Что означает “Недетерминированными Пользовательскими функциями может использоваться детерминированным способом”?

Мы столкнулись с той же проблемой. Мы также удивлены тем, что DataSet не поддерживает addSink().

Я рекомендую не переключаться в режим потоковой передачи. Вы можете отказаться от некоторых оптимизаций (т. Е. Пулов памяти), доступных в пакетном режиме.

Возможно, вам придется реализовать свой собственный OutputFormat , чтобы выполнить группирование.

Вместо этого вы можете расширить OutputFormat[YOUR_RECORD] (или RichOutputFormat[]), где вы все еще можете использовать BucketAssigner[YOUR_RECORD, String] для открытия / записи / закрытия выходных потоков.

Это то, что мы сделали, и это прекрасно работает.

Я надеюсь, что Flink скоро поддержит это в пакетном режиме.

6
задан dance2die 2 April 2009 в 13:12
поделиться

3 ответа

BOL на самом деле указывает:

Следующие функции не всегда детерминированы, но могут использоваться в индексных представлениях или индексах на вычисляемых столбцах, когда они указаны детерминированным способом.

и затем ниже его указывает, какие условия нужно соблюдать для создания их детерминированными.

Например.

БРОСОК - Детерминированный, если не используется с датой и временем, smalldatetime, или sql_variant

Другими словами, необходимо встретить их условие использовать их детерминированным способом

Например, когда Вы составляете таблицу

CREATE TABLE [dbo].[deterministicTest](
    [intDate] [int] NULL,
    [dateDateTime] [datetime] NULL,
    [castIntToDateTime]  AS (CONVERT([datetime],[intDate],0)),
    [castDateTimeToInt]  AS (CONVERT([int],[dateDateTime],0)),
    [castIntToVarchar]  AS (CONVERT([varchar],[intDate],0))
) ON [PRIMARY]

можно применить индекс на castIntToVarchar, но при попытке добавить индекс к castDateTimeToInt или castIntToDateTime, то Вы получите следующую ошибку:

Столбец 'castDateTimeToInt' (castIntToDateTime) в таблице 'dbo.deterministicTest' не может использоваться в индексе или статистике или как ключ раздела, потому что это недетерминировано.

Таким образом, дата и время не может использоваться ни в качестве источника, ни в качестве целевого формата функции ПРЕОБРАЗОВАНИЯ, если Вы хотите остаться детерминированными

5
ответ дан 8 December 2019 в 05:58
поделиться

Пример:

RAND(1)  // deterministic, always returns the same number

по сравнению с:

RAND()   // non-deterministic, returns new random number on each call

Обратите внимание, что это использует определение статьи MSDN "детерминированного" слова

8
ответ дан 8 December 2019 в 05:58
поделиться

То, что функция детерминирована, означает, что она, как гарантируют, всегда возвратит то же выходное значение для тех же входных параметров.

Используя недетерминированную функцию детерминированным способом я принимаю средства, что Вы удостоверяетесь, что диапазон аргументов, которые Вы передадите функции, таков, что возвращаемое значение будет детерминировано, т.е. зависимо только opon те аргументы.

Что это подразумевает, на практике зависит от того, что делает функция и каким образом это недетерминировано.

9
ответ дан 8 December 2019 в 05:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: