Sql types: SQL Data Types for MySQL, SQL Server, and MS Access
Содержание
Документация JDK 20 — Главная
- Главная
- Ява
- Java SE
- 20
Обзор
- Прочтите меня
- Примечания к выпуску
- Что нового
- Руководство по миграции
- Загрузить JDK
- Руководство по установке
- Формат строки версии
Инструменты
- Технические характеристики инструментов JDK
- Руководство пользователя JShell
- Руководство по JavaDoc
- Руководство пользователя средства упаковки
Язык и библиотеки
- Обновления языка
- Основные библиотеки
- HTTP-клиент JDK
- Учебники по Java
- Модульный JDK
- Руководство программиста API бортового регистратора
- Руководство по интернационализации
Технические характеристики
- Документация API
- Язык и ВМ
- Имена стандартных алгоритмов безопасности Java
- банок
- Собственный интерфейс Java (JNI)
- Инструментальный интерфейс JVM (JVM TI)
- Сериализация
- Проводной протокол отладки Java (JDWP)
- Спецификация комментариев к документации для стандартного доклета
- Прочие характеристики
Безопасность
- Руководство по безопасному кодированию
- Руководство по безопасности
Виртуальная машина HotSpot
- Руководство по виртуальной машине Java
- Настройка сборки мусора
Управление и устранение неполадок
- Руководство по устранению неполадок
- Руководство по мониторингу и управлению
- Руководство по JMX
Client Technologies
- Руководство по специальным возможностям Java
Сопоставление типов данных между SQL и языками обработчиков
Написанная вами хранимая процедура или определяемая пользователем функция вызывается из SQL и таким образом получает и возвращает значения в типах данных SQL. Однако,
его базовый обработчик будет использовать типы данных из языка обработчика, такого как Java, Python или Scala. Во время выполнения Snowflake преобразует
между типами SQL и типами обработчиков для аргументов и возвращаемых значений.
Обратите внимание, что Snowflake выполняет эти преобразования также в следующих случаях:
В этом разделе описываются допустимые сопоставления между данными и типами SQL и поддерживаемыми языками обработчиков. Используйте этот контент, чтобы выбрать
типы данных при написании обработчика.
Сведения о типах данных Snowflake SQL см. в разделе Сводка типов данных.
Сопоставления типов данных SQL-Java
В таблице ниже показаны сопоставления типов между SQL и Java. Эти отображения обычно применяются к обоим аргументам
передаваемые процедуре или функции и возвращаемые из них значения. Однако есть некоторые исключения, которые перечислены
в сносках.
Обратите внимание, что некоторые типы данных SQL (например, NUMBER) совместимы с несколькими типами данных Java (например, int
, long
и т. д.). В этих случаях,
вы можете использовать любой тип данных Java, который имеет достаточную емкость для хранения фактических значений, которые будут переданы. Если вы
передать значение SQL несовместимому типу данных Java (или наоборот), Snowflake выдает ошибку.
Тип SQL | Тип Java | Примечания |
---|---|---|
МАССИВ | | Форматирует элементы массива как строки. |
МАССИВ | | Форматирует массив как строку JSON (например, |
ДВОИЧНЫЙ | | |
ДВОИЧНЫЙ | | Кодирует двоичную строку в шестнадцатеричном формате. 4 |
ДВОИЧНЫЙ | | Представляет значение BINARY как последовательность байтов. |
Логический | | Не может быть нулевым. |
Логический | | |
Логический | | 4 |
ДАТА | | |
ДАТА | | Форматирует дату как |
ПОПЛАВОК | | Не может быть нулевым. |
ПОПЛАВОК | | |
ПОПЛАВОК | | Не может быть нулевым. Может привести к потере точности. |
ПОПЛАВОК | | Может привести к потере точности. |
ПОПЛАВОК | | Может привести к потере точности (преобразование с плавающей запятой в строку с потерями). |
ГЕОГРАФИЯ | | Форматирует географию как GeoJSON . |
ГЕОГРАФИЯ | География | 5 |
НОМЕР | | Не может быть нулевым. Должен соответствовать диапазону коротких (без дробной части, а целая часть не может превышать максимальное/минимальное значение short). |
НОМЕР | | Должен соответствовать диапазону коротких (без дробной части, а целая часть не может превышать максимальное/минимальное значение short). |
НОМЕР | | Не может быть нулевым. Должен соответствовать диапазону int (без дробной части, а целая часть не может превышать максимальное/минимальное значение int). |
НОМЕР | | Должен вписываться в диапазон значений int (без дробной части, а целая часть не может превышать значения max/min int). |
НОМЕР | | Не может быть нулевым. Должен соответствовать диапазону long (без дробной части, а целая часть не может превышать максимальное/минимальное значение long). |
НОМЕР | | Должен соответствовать диапазону long (без дробной части, а целая часть не может превышать значения max/min long). |
НОМЕР | | |
НОМЕР | | Должен соответствовать диапазону BigInteger (без дробной части). |
НОМЕР | | |
ОБЪЕКТ | | Ключи карты являются ключами объекта, а значения отформатированы как строки. |
ОБЪЕКТ | | Форматирует объект как строку JSON (например, |
ВРЕМЯ | | 3 |
ВРЕМЯ | | Форматирует время как |
TIMESTAMP_LTZ | | Должен соответствовать диапазону java.sql.Timestamp. 3 |
TIMESTAMP_LTZ | | Выходной формат |
TIMESTAMP_NTZ | | Должен соответствовать диапазону java.sql.Timestamp. Рассматривает время настенных часов как смещение от эпохи Unix (фактически накладывая часовой пояс UTC). 3 |
TIMESTAMP_NTZ | | Рассматривает время настенных часов как смещение от эпохи Unix (фактически накладывая часовой пояс UTC). Выходной формат |
TIMESTAMP_TZ | | Должен соответствовать диапазону java. sql.Timestamp. 3 |
TIMESTAMP_TZ | | Выходной формат: |
ВАРЧАР | | |
ВАРИАНТ | Вариант | Тип данных Variant — это класс в пакете Snowpark. Дополнительные сведения см. в разделе Типы пакетов Snowpark, поддерживаемые пользовательскими функциями. Пример см. в разделе «Передача значения VARIANT во встроенную пользовательскую функцию Java». |
- 1(1,2)
Формат соответствует формату временной метки Интернета (RFC)
DY, DD MON YYYY Hh34:MI:SS TZHTZM
, как описано в Форматах меток времени. Если присутствует смещение часового пояса (компонентTZHTZM
), оно обычно представляет собой цифры (например,-0700
указывает на 7 часов от UTC). Если смещение часового пояса составляетZ
(для «Zulu»), а не цифры, это синоним «+0000» (UTC).- 2
Формат соответствует формату временной метки Интернета (RFC)
DY, DD MON YYYY Hh34:MI:SS
, как описано в разделе Форматы временной метки. Если за строкой следует пробел иZ
(для «Zulu»), что явно указывает, что смещение равно «+0000» (UTC).- 3(1,2,3,4,5,6,7,8)
Хотя Snowflake может хранить значения времени с точностью до наносекунды, библиотека java.sql.time поддерживает точность только до миллисекунды. Преобразование между типами данных Snowflake и Java может снизить эффективную точность до миллисекунд.
- 4(1,2,3,4,5,6)
Это сопоставление типов поддерживается при преобразовании аргументов SQL в формат Java, но не при преобразовании возвращаемых типов Java в типы SQL.
- 5
Java не имеет собственного типа данных Geography. Упомянутый здесь тип данных Geography является классом в пакете Snowpark. Дополнительные сведения см. в разделе Типы пакетов Snowpark, поддерживаемые пользовательскими функциями.
Массивы
Пользовательские функции Java могут принимать массивы любого из следующих типов данных Java:
Тип данных | Примечания |
---|---|
| |
| МАССИВ Snowflake должен содержать только логические элементы и не должен содержать значений NULL. |
| МАССИВ Snowflake должен содержать одно из следующих значений и не должен содержать значений NULL. |
| Массив снежинок должен содержать только элементы с фиксированной точкой с масштабом 0 и |
Значения NULL
Snowflake поддерживает два разных значения NULL: SQL NULL
и VARIANT JSON null
. (Для получения информации о Снежинке
VARIANT NULL, см. значения NULL.)
Java поддерживает один значение null
, которое предназначено только для непримитивных типов данных.
Аргумент SQL NULL
для обработчика Java преобразуется в значение Java null
, но только для типов данных Java, которые
поддержка ноль
.
Возвращенное значение Java null
преобразуется обратно в SQL NULL
.
TIMESTAMP_LTZ Значения и часовые пояса
Пользовательская функция Java в значительной степени изолирована от среды, в которой она вызывается. Однако часовой пояс наследуется от
вызывающая среда. Если сеанс вызывающей стороны устанавливает часовой пояс по умолчанию перед вызовом пользовательской функции Java, тогда
UDF имеет тот же часовой пояс по умолчанию. Java UDF использует те же данные базы данных часовых поясов IANA, что и собственный TIMEZONE.
Использует Snowflake SQL (т. е. данные из версии 2021a базы данных часовых поясов).
Типы пакетов Snowpark, поддерживаемые для пользовательских функций
В пользовательской функции можно использовать определенное подмножество типов, включенных в пакет Snowflake.
Сноупарк Java-пакет. Хотя эти типы
разработанные для использования в коде Snowpark, некоторые также поддерживаются для использования в UDF для удобства, которое они могут предоставить. (Подробнее о
Snowpark, см. документацию Snowpark.)
Примечание
Библиотека Snowpark необходима для хранимых процедур, написанных на Java, Python и Scala. В результате вы можете использовать типы Snowpark
там без ограничений.
Типы Snowpark в следующей таблице поддерживаются в коде UDF. Вы не должны использовать другие типы Snowpark в коде UDF; они не
поддерживается там.
Тип сноупарка | Требуется версия Snowpark | Описание |
---|---|---|
География | 1. 2.0 и выше | Представляет тип Snowflake GEOGRAPHY. Для примера, который использует |
Вариант | 1.4.0 и выше | Представляет данные Snowflake VARIANT. Пример, в котором используется тип данных |
Указание пакета Snowpark в качестве зависимости
При разработке кода UDF, использующего пакет Snowpark, вам необходимо настроить среду разработки, чтобы вы могли компилировать и
запускать код с зависимостями Snowpark. Дополнительные сведения см. в разделе «Настройка других сред разработки для Snowpark Java».
При развертывании UDF путем выполнения оператора CREATE FUNCTION можно указать Snowpark
package как зависимость без загрузки JAR-файла на сцену (библиотека уже есть в Snowflake). Для этого укажите пакет
имя и версия в пункте PACKAGES
. Пример синтаксиса см. в разделе Передача значения GEOGRAPHY во встроенную пользовательскую функцию Java.
Сопоставления типов данных SQL-JavaScript
В следующей таблице показаны типы данных Snowflake SQL и соответствующие типы данных JavaScript:
Тип данных SQL | Тип данных JavaScript | Примечания |
---|---|---|
МАССИВ | | |
Логический | | |
ДАТА | | |
REAL, FLOAT, FLOAT8, FLOAT4, DOUBLE, DOUBLE PRECISION | | |
ВРЕМЯ | | |
TIMESTAMP, TIMESTAMP_LTZ, TIMESTAMP_NTZ, TIMESTAMP_TZ | | Когда временная метка передается в качестве аргумента хранимой процедуре, временная метка преобразуется в JavaScript |
VARCHAR, СИМВОЛ, СИМВОЛ, СТРОКА, ТЕКСТ | | |
ВАРИАНТ | |
Примечания
Не все типы данных Snowflake SQL имеют соответствующий тип данных JavaScript. Например, JavaScript не
напрямую поддерживают типы данных INTEGER или NUMBER. В этих случаях следует преобразовать тип данных SQL в
соответствующий альтернативный тип данных. Например, вы можете преобразовать SQL INTEGER в SQL FLOAT, который затем может быть
преобразовано в значение JavaScript типа данных число
.
В таблице ниже показаны соответствующие преобразования для несовместимых типов данных SQL:
Несовместимый тип данных SQL | Совместимый тип данных SQL |
---|---|
ДВОИЧНЫЙ | Uint8Array |
ЦЕЛОЕ ЧИСЛО | ПОПЛАВОК |
ЦИФРА, ЦИФРА, ДЕСЯТИЧНАЯ | ПОПЛАВОК |
ОБЪЕКТ | Uint8Array |
При возврате значений
Если возвращает
оператор в JavaScript возвращает тип данных, отличный от объявленного типа возвращаемого значения хранимой процедуры,
значение JavaScript приводится к типу данных SQL, если это возможно. Например, если возвращается число, но
хранимая процедура объявлена как возвращающая строку, число преобразуется в строку в JavaScript, и
затем копируется в строку, возвращенную в операторе SQL. (Имейте в виду, что некоторые ошибки программирования JavaScript, такие как
возвращающий неправильный тип данных, может быть скрыт этим поведением.)
Если не существует действительного приведения для преобразования, возникает ошибка.
При связывании значений
Когда вы связываете переменные JavaScript с инструкциями SQL, Snowflake преобразует типы данных JavaScript в
типы данных SQL. Вы можете привязывать переменные следующих типов данных JavaScript:
число
строка
SfDate
Дополнительные сведения о типе данных
SfDate
, который не является стандартным типом данных JavaScript, см.
API хранимых процедур JavaScript.
Дополнительные сведения о привязке, включая некоторые примеры, см. в разделе Переменные привязки.
Вам также могут быть полезны следующие темы:
Типы данных JavaScript
Аргументы JavaScript и возвращаемые значения
Сопоставления типов данных SQL-Python
В таблице ниже показаны сопоставления типов между SQL и Python. Эти отображения обычно применяются к обоим аргументам
передается обработчику Python, а значения возвращаются из него.
Тип SQL | Тип Python | Примечания |
---|---|---|
МАССИВ | | Когда тип данных Python преобразуется в МАССИВ, если есть встроенные десятичные данные Python, внедренные десятичные числа Python будут преобразованы в строку в МАССИВЕ. |
ДВОИЧНЫЙ | | |
Логический | | |
ДАТА | | |
ПОПЛАВОК | | Операции с плавающей запятой могут иметь небольшие ошибки округления, которые могут накапливаться, особенно когда агрегатные функции обрабатывают большое количество строк. Ошибки округления могут меняться каждый раз при выполнении запроса, если строки обрабатываются в другом порядке. Дополнительные сведения см. в разделе Типы числовых данных: с плавающей запятой. |
ГЕОГРАФИЯ | | Форматирует географию как GeoJSON, а затем преобразует ее в словарь Python. |
НОМЕР | | Если масштаб типа NUMBER равен 0, то используется тип Python int. В противном случае используется тип decimal.Decimal. |
ОБЪЕКТ | | Когда тип данных Python преобразуется в OBJECT, если есть встроенные десятичные данные Python, внедренные десятичные числа Python будут преобразованы в String в OBJECT. |
ВРЕМЯ | | Хотя Snowflake может хранить значения времени с точностью до наносекунд, тип Python datetime.time поддерживает точность только до миллисекунд. Преобразование между типами данных Snowflake и Python может снизить эффективную точность до миллисекунд. |
TIMESTAMP_LTZ | | Используйте локальный часовой пояс для преобразования внутреннего времени UTC в локальное «наивное» время и дату. Требует «наивного» datetime в качестве возвращаемого типа. |
TIMESTAMP_NTZ | | Прямое преобразование в «наивное» значение даты и времени. Требует «наивного» datetime в качестве возвращаемого типа. |
TIMESTAMP_TZ | | Преобразование в «осведомленное» значение даты и времени с информацией о часовом поясе. Требует «осведомленного» datetime в качестве возвращаемого типа. |
ВАРЧАР | | |
ВАРИАНТ | | Каждая вариантная строка динамически преобразуется в тип Python для аргументов и наоборот для возвращаемых значений. Следующие типы преобразуются в строки, а не в собственные типы Python: decimal, binary, date, time, timestamp_ltz, timestamp_ntz, timestamp_tz. Когда тип данных Python преобразуется в VARIANT, если есть встроенные десятичные данные Python, внедренные десятичные числа Python будут преобразованы в String в VARIANT. |
Сопоставления типов данных SQL-Scala
Snowflake поддерживает следующие типы данных Scala в дополнение к типам Java, перечисленным в сопоставлениях типов данных SQL-Java:
Тип данных SQL | Тип Scala | Примечания |
---|---|---|
МАССИВ | | |
ДВОИЧНЫЙ | | |
Логический | | |
ДВОЙНОЙ | | |
ПОПЛАВОК | | |
НОМЕР | Поддерживаются следующие типы: | |
ОБЪЕКТ | | |
ВАРЧАР | | |
ВАРИАНТ | | Форматирует значение в зависимости от представляемого типа. |