Подключение к потокам данных
В проектах Открытое озеро данных Qlik поддерживаются следующие потоковые службы. Данные событий непрерывно поступают для обеспечения доступности практически в реальном времени для последующей интеграции данных, аналитики и ИИ, что позволяет создавать конвейеры с низкой задержкой, отражающие самую актуальную операционную активность.
Потоковые службы, такие как Apache Kafka и Amazon Kinesis, предоставляют надежные, высокопроизводительные конвейеры для захвата операционных событий по мере их возникновения. В отличие от файловых источников, которые полагаются на пакетную загрузку, потоковые источники непрерывно доставляют данные по мере возникновения событий, обеспечивая обработку практически в реальном времени без ожидания генерации или планирования файлов. Производители публикуют структурированные или полуструктурированные сообщения, которые сохраняют свою схему и поддерживают секционирование. Все обновления и удаления для одной и той же записи должны использовать один и тот же ключ секционирования. Kafka и Kinesis гарантируют упорядочивание только в пределах одной секции или сегмента, а не по всему разделу или потоку, поэтому использование согласованного ключа секционирования гарантирует, что изменения для данной записи обрабатываются в правильной последовательности. Qlik также поддерживает Amazon S3 в качестве источника потоковой передачи для непрерывного приема данных событий.
Потоковый прием данных в сравнении с пакетным приемом данных
Различие между потоковыми и пакетными источниками данных заключается в следующем:
-
С обоими источниками события эффективно поступают каждую минуту, поддерживая обработку с низкой задержкой и аналитику почти в реальном времени.
-
В случае непотоковых источников сначала происходит полная загрузка существующих данных, а затем поступают изменения. Вы также можете перезагрузить данные полной загрузки из источника.
-
В случае потоковых источников нет четкого различия между начальной загрузкой и последующими событиями. Qlik может управлять сроком хранения, а также поддерживает разделы.
В проекте Открытое озеро данных Qlik источники потоковой передачи могут использоваться только с задачей промежуточного хранения потока и задачей преобразования потока:
-
Данные потоковой передачи принимаются с помощью задачи промежуточного хранения потока, и вместо обработки дискретных файлов задача промежуточного хранения потока считывает события по мере их поступления, помещает данные в Amazon S3 и сохраняет события в виде файлов Avro. Этот подход сохраняет эволюцию схемы, поддерживает сложные типы данных, такие как структуры, и обеспечивает эффективное хранение с оптимизированной производительностью запросов при сохранении модели непрерывного приема данных.
-
Когда вы загружаете данные из потокового источника, задача преобразования потока автоматически добавляется для каждого набора данных, который будет храниться в формате Iceberg. При необходимости задача преобразования потока может использоваться для стандартизации структур, обогащения полезных нагрузок событий или согласования данных с моделями последующего потребления.
-
Задача зеркалирования данных позволяет зеркалировать наборы данных из потоковых источников в облачные хранилища данных, что позволяет последующим системам потреблять потоковые события без дублирования данных. Для получения дополнительной информации см. раздел Зеркальное отображение данных в облачное хранилище данных.
Сопоставления типов данных
Исходная схема основана на выборке данных, взятой до фазы PREPARE при создании проекта конвейера, а эволюция схемы обрабатывается во время чтения. Задачи зеркалирования и другие последующие задачи, которые не поддерживают STRUCT и ARRAY, используют тип JSON. Данные можно анализировать с помощью SQL.
Нижеследующие сопоставления типов данных применимы ко всем поддерживаемым источникам данных, но различаются в зависимости от типа исходного файла, и следует отметить следующее:
-
Типы данных выводятся из образца загружаемых данных. Например, если поле содержит только целочисленные значения в образце, оно создается как INT8 в задачах потокового промежуточного хранения и преобразования. Если последующие данные включают дробные значения двойной точности, файлы промежуточного хранения содержат эти значения; однако в задаче преобразования потока, если для параметра Изменить тип данных поля установлено значение Игнорировать, столбец остается INT8, а дробные значения усекаются. Чтобы избежать непреднамеренного усечения, убедитесь, что данные образца включают полный диапазон ожидаемых значений перед подключением, или настройте Изменить тип данных поля на Остановить задачу на ранних этапах и при необходимости скорректируйте типы данных.
-
Если поле добавляется в структуру в источнике, оно всегда добавляется в целевой объект промежуточного хранения. Для потокового преобразования поведение применяется в соответствии с опцией, выбранной в Настройки задачи потокового преобразования > Эволюция схемы > Добавить поля в структуру (Применить к целевому объекту, Игнорировать, Остановить задачу).
-
Если поле отсутствует в определенной записи или массив пуст, они рассматриваются как null.
-
Если набор данных сглаживается массивом, и поступает запись, где этот массив пуст или null, система создает одну строку, и сглаженное поле становится null. Это не исключается автоматически. Если вы хотите исключить эти строки, вручную добавьте фильтр, например, array_element IS NOT NULL.
-
Типы данных, отображаемые в пользовательском интерфейсе, отражают выбранную детализацию набора данных. Для выпрямленных массивов отображается тип данных отдельного элемента, а не сама структура массива.
-
Новый атрибут нельзя добавить внутри структуры вложенного поля JSON, только на корневом уровне.
-
В задачах преобразования потоковой передачи поддерживается сглаживание только для одного уровня массива. Когда сглаживание применяется к многоуровневому массиву, например, ARRAY<ARRAY<STRUCT>>, сглаживается только внешний массив, что приводит к ARRAY<STRUCT>, а не к полностью сглаженной структуре STRUCT. Кроме того, текущий пользовательский интерфейс позволяет настраивать сглаживание только на уровне столбца. В результате выбор многоуровневого массива неявно применяет сглаживание только к первому уровню массива.
JSON
В файлах JSON числовое значение в источнике определяет целевой тип данных:
-
INT8 используется для целочисленных значений, которые находятся в пределах поддерживаемого диапазона целых чисел и не содержат дробной части.
-
REAL8 (DOUBLE) используется, когда значение содержит дробную часть (число с плавающей запятой).
-
STRING используется, когда числовое значение превышает максимально поддерживаемый диапазон целых чисел.
Типы данных сопоставляются следующим образом:
| Типы исходных данных | Qlik Talend Data Integration типов данных |
|---|---|
| STRING | STRING |
| NUMBER | INT8 |
| NUMBER | REAL8 |
| NUMBER | STRING |
| BOOLEAN | BOOLEAN |
| ARRAY | ARRAY |
| OBJECT | STRUCT |
CSV, TSV, REGEX и SPLIT
По умолчанию все исходные типы данных импортируются как строка. Используйте параметр Автоматически определять типы для сопоставления исходных и целевых типов следующим образом:
| Типы исходных данных | Qlik типов данных |
|---|---|
| NUMERIC | INT8/REAL8 |
| True/TRUE/true/False/FALSE/false | BOOLEAN |
| TIMESTAMP | Метки времени в формате yyyy-MM-dd HH:mm:ss или yyyy-MM-ddTHH:mm:ssz анализируются как тип datetime. Если включен часовой пояс, значение анализируется как строка. |
Parquet
Файлы Parquet поддерживают физические и логические типы данных. Физические типы данных определяют, как значения хранятся на диске, например INT32, DOUBLE или BYTE_ARRAY. Логические типы данных обеспечивают семантическое значение поверх физического представления, например, определяя, представляет ли целочисленное значение дату. Когда логический тип прикреплен к столбцу Parquet и поддерживается в Открытое озеро данных Qlik (как указано ниже), задача промежуточного хранения Streaming использует логический тип при определении целевой схемы, а не базовый физический тип. Это гарантирует правильную интерпретацию данных, сохраняет предполагаемую семантику, такую как Πрецизионность, масштаб и временное значение, и приводит к более точным схемам при записи данных в нижестоящие форматы.
Данные, полученные из файлов Parquet, сопоставляются следующим образом:
| Типы исходных данных | Логические типы | Qlik Talend Data Integration типов данных |
|---|---|---|
| BOOLEAN | BOOLEAN | |
| INT32 | INT8 | |
| INT64 | INT8 | |
| INT96 | DATETIME | |
| FLOAT | REAL8 | |
| DOUBLE | REAL8 | |
| МАССИВ БАЙТОВ | STRING (Закодировано как Base64) | |
| массив байтов фиксированной длины | СТРОКА (Закодировано как Base64) | |
| МАССИВ БАЙТОВ | STRING | STRING |
| МАССИВ БАЙТОВ | ENUM | STRING |
| INT32 | DECIMAL | INT8 |
| INT64 | DECIMAL | INT8 |
| массив байтов фиксированной длины | DECIMAL | INT8/REAL8 (Закодировано как Base64) |
| МАССИВ БАЙТОВ | DECIMAL | INT8/REAL8 (Закодировано как Base64) |
| INT32 | DATE | DATE |
| INT32 | ВРЕМЯ(МИЛЛИС,true) | INT8 |
| INT64 | ВРЕМЯ(МИКРОС,true) | TIME |
| INT64 | TIMESTAMP(MICROS,true) | DATETIME |
| INT64 | TIMESTAMP(MILLIS,true) | DATETIME |
| ВЛОЖЕННЫЕ ТИПЫ | STRUCT | |
| LIST | ARRAY | |
| MAP | ARRAY<STRUCT>. Массив структур, представляющих пары «ключ-значение». |
Avro
Следующие сопоставления применяются к файлам Avro с реестром схем.
| Типы исходных данных | Логические типы | Qlik Talend Data Integration типов данных |
|---|---|---|
| BOOLEAN | BOOLEAN | |
| INT | INT8 | |
| Long | INT8 | |
| FLOAT | REAL8 | |
| DOUBLE | REAL8 | |
| BYTES | STRING | |
| STRING | STRING | |
| ЗАПИСЬ | STRUCT | |
| ENUM | STRING | |
| ARRAY | ARRAY | |
| MAP | МАССИВ<СТРУКТУРА> | |
| ОБЪЕДИНЕНИЕ | ||
| ФИКСИРОВАННЫЙ | STRING | |
| BYTES | DECIMAL | DECIMAL |
| ФИКСИРОВАННЫЙ | DECIMAL | DECIMAL |
| INT | DATE | DATE |
| INT | TIME-MILLIS | INT8 |
| INT | TIME-MICROS | TIME |
| Long | TIMESTAMP-MILLIS | DATETIME |
| Long | TIMESTAMP-MICROS | DATETIME |
ORC
Следующие сопоставления применяются к файлам ORC.
| Типы исходных данных | Qlik Talend Data Integration типов данных |
|---|---|
| BOOLEAN | BOOLEAN |
| БАЙТ | INT8 |
| SHORT | INT8 |
| INT | INT8 |
| Long | INT8 |
| DATE | DATE |
| FLOAT | REAL8 |
| DOUBLE | REAL8 |
| TIMESTAMP | DATETIME |
| BINARY | STRING |
| DECIMAL | REAL8 |
| STRING | STRING |
| VARCHAR | STRING |
| CHAR | STRING |
| СПИСОК | ARRAY |
| MAP | МАССИВ<СТРУКТУРА>. Массив структур, представляющих пары ключ-значение. |
| STRUCT | STRUCT |
| UNION |
Ограничения
Следующие ограничения применяются ко всем источникам данных:
-
Если ваши файлы разных типов, что может произойти, когда они поступают из нескольких источников или версий, задача преобразования, созданная с использованием одного файла-образца (например, во время адаптации), не учитывает эти различия автоматически.
-
Если вы изменяете типы данных в задаче промежуточного хранения, например потому, что вам нужно хешировать данные, убедитесь, что типы данных преобразования соответствуют новым типам данных.