Функции модуля Python tngri
Для удобной работы с данными в ячейках типа Python создан модуль tngri
. В нем доступны функции, описанные на этой странице.
Функции модуля |
tngri.sql()
Описание |
Выполняет указанный запрос SQL внутри ячейки типа Python. |
Использование |
|
Функцией удобно пользоваться при необходимости выполнить какие-либо запросы SQL непосредственно внутри ячейки типа Python, например, внутри цикла или в других сложных конструкциях, не создавая для этого отдельную ячейку типа SQL и используя любые локальные переменные и функции Python внутри текста запроса SQL.
Один из сценариев использования описан здесь.
Посмотреть примеры
Пример 1
Создадим таблицу с именем из переменной table_name
и запишем в нее в цикле:
-
индекс (начиная с
1
) -
слово из фразы, заданной в переменной
test_phrase
-
результат применения к этому слову заданной функции
length_in_chars
В каждой итерации цикла будем выводить значение индекса, добавленное слово и результат запроса SQL с текущим количеством строк в создаваемой таблице.
import tngri
def length_in_chars(text):
if len(text) == 1:
return '1 character'
else:
return f'{len(text)} characters'
table_name = 'my_table'
test_phrase = 'I love Tengri'
tngri.sql(f'CREATE OR REPLACE TABLE {table_name} \
(index INT, word VARCHAR, length VARCHAR)'
)
ind = 0
for word in test_phrase.split(' '):
ind += 1
tngri.sql(f"INSERT INTO {table_name} VALUES \
({ind}, '{word}', '{length_in_chars(word)}')"
)
print(f'Added word: "{word}"')
print(tngri.sql(f'SELECT count(*) FROM {table_name}'))
Step: 1
Added word: "I"
shape: (1, 1)
+----------+
│ column_0 │
│ --- │
│ i64 │
+----------+
│ 1 │
+----------+
Step: 2
Added word: "love"
shape: (1, 1)
+----------+
│ column_0 │
│ --- │
│ i64 │
+----------+
│ 2 │
+----------+
Step: 3
Added word: "Tengri"
shape: (1, 1)
+----------+
│ column_0 │
│ --- │
│ i64 │
+----------+
│ 3 │
+----------+
Теперь в ячейке типа SQL выведем созданную таблицу, упорядочив ее по индексу:
SELECT * FROM my_table
ORDER BY index
+-------+--------+--------------+
| index | word | length |
+-------+--------+--------------+
| 1 | I | 1 character |
+-------+--------+--------------+
| 2 | love | 4 characters |
+-------+--------+--------------+
| 3 | Tengri | 6 characters |
+-------+--------+--------------+
Пример 2
Выполним итеративную загрузку данных из файлов .parquet
из хранилища S3 в таблицу по маске путей к файлам.
В каждой итерации цикла будем выводить результат запроса с количеством строк в создаваемой таблице.
import tngri
for i in range(1,4):
file_name = f"s3://prostore/Stage/<lake_path>/{i}.parquet"
tngri.sql(f"INSERT INTO raw.dyntest SELECT * FROM read_parquet('{file_name}')")
print(tngri.sql("SELECT count(*) FROM raw.dyntest"))
shape: (1, 1)
+----------+
│ column_0 │
│ --- │
│ i64 │
+----------+
│ 10000000 │
+----------+
shape: (1, 1)
+----------+
│ column_0 │
│ --- │
│ i64 │
+----------+
│ 20000000 │
+----------+
shape: (1, 1)
+----------+
│ column_0 │
│ --- │
│ i64 │
+----------+
│ 30000000 │
+----------+
tngri.upload_df()
Описание |
Загружает данные из DataFrame в Tengri. |
Использование |
|
Загружает данные из указанного DataFrame в Tengri (в хранилище S3).
Возвращает строку с именем файла .parquet
, в который были загружены данные.
Подробнее загрузка данных в Tengri с помощью Python описана здесь.
Посмотреть примеры
-
Создадим DataFrame, и загрузим его в Tengri:
import tngri import pandas my_df = pandas.DataFrame(range(100)) tngri.upload_df(my_df)
UploadedFile(s3_path='s3://prostore/Stage/ijwsajclddxw.parquet', _client=None)
-
Создадим DataFrame, загрузим его в Tengri и запишем имя файла
.parquet
в переменнуюfile_name
:import tngri import pandas my_df = pandas.DataFrame(range(100)) file_name = tngri.upload_df(my_df) print(my_df) print(file_name)
0 0 0 1 1 2 2 3 3 4 4 .. .. 95 95 96 96 97 97 98 98 99 99 [100 rows x 1 columns] tdiiuetablyx.parquet
tngri.upload_file()
Описание |
Загружает данные из файла в Tengri. |
Использование |
|
-
FilePath
— путь к файлу, который нужно загрузить в Tengri -
FileName
— имя для файла в Tengri
Загружает данные из файла по указанному пути в Tengri (в хранилище S3).
Возвращает строку с путем и именем файла внутри хранилища S3, в который были загружены данные.
Один из сценариев использования описан здесь.
Посмотреть примеры
-
Загрузим в Tengri данные из файла
.json
, доступного по URL:import tngri import urllib.request urllib.request.urlretrieve( 'https://tngri.postgrespro.ru/documentation/ru/stable/_attachments/tengri_data_types.json', 'my_file.json' ) tngri.upload_file('my_file.json')
UploadedFile(s3_path='s3://prostore/Stage/pxfihzbonctd.json', _client=None)
Выведем первые 5 строк таблицы, прочитав ее из загруженного файла:
SELECT * FROM read_json("pxfihzbonctd.json") LIMIT 5
+----------+-----------+----------+---------------------------+ | name | type | category | description | +----------+-----------+----------+---------------------------+ | BIGINT | data type | numeric | Целые числа. | +----------+-----------+----------+---------------------------+ | BIGINT[] | data type | array | Массивы целых чисел. | +----------+-----------+----------+---------------------------+ | BLOB | data type | blob | Двоичные объекты. | +----------+-----------+----------+---------------------------+ | BOOL | data type | boolean | Булевы значения. | +----------+-----------+----------+---------------------------+ | BOOL[] | data type | array | Массивы булевых значений. | +----------+-----------+----------+---------------------------+
-
Загрузим в Tengri данные из файла
.json
, доступного по URL, и сохраним имя загруженного файла в переменную:import tngri import urllib.request urllib.request.urlretrieve( 'https://tngri.postgrespro.ru/documentation/ru/stable/_attachments/tengri_data_types.json', 'my_file.json' ) file_name = tngri.upload_file('my_file.json') print(file_name)
pxfihzbonctd.json
Выведем первые 5 строк таблицы, прочитав ее из загруженного файла:
SELECT * FROM read_json("pxfihzbonctd.json") LIMIT 5
+----------+-----------+----------+---------------------------+ | name | type | category | description | +----------+-----------+----------+---------------------------+ | BIGINT | data type | numeric | Целые числа. | +----------+-----------+----------+---------------------------+ | BIGINT[] | data type | array | Массивы целых чисел. | +----------+-----------+----------+---------------------------+ | BLOB | data type | blob | Двоичные объекты. | +----------+-----------+----------+---------------------------+ | BOOL | data type | boolean | Булевы значения. | +----------+-----------+----------+---------------------------+ | BOOL[] | data type | array | Массивы булевых значений. | +----------+-----------+----------+---------------------------+
tngri.upload_s3()
Описание |
Загружает файл из указанного бакета S3 в Tengri. |
Использование |
|
-
object
— путь к файлу в хранилище S3. -
access_key
— ключ доступа для S3. -
secret_key
— секретный ключ для S3.
Расширение файла при этом может быть любым. Оно останется тем же, каким оно было в начальном файле.
При необходимости для загружаемого файла можно задать путь и имя через опциональный параметр filename
.
Пример использования описан здесь.