Функции модуля Python tngri
Для удобной работы с данными в ячейках типа Python создан модуль tngri. В нем доступны функции, описанные на этой странице.
|
Функции модуля |
tngri.run_notebook()
| Описание |
Запускает указанный ноутбук из другого ноутбука. |
| Использование |
|
Запускает указанный ноутбук из другого ноутбука. Возвращает результаты выполнения всех ячеек запущенного ноутбука единым текстовым блоком.
Функцией удобно пользоваться при необходимости оркестрации запусков нескольких ноутбуков. С ее помощью можно реализовать разную логику:
-
Запуск ноутбука по условию
-
Запуск ноутбука сразу после выполнения другого ноутбука
-
Выделение части вычислений в отдельный ноутбук и запуск этой части из других ноутбуков
Посмотреть пример
import tngri
result = tngri.run_notebook('My Notebook')
print(result)
<Output of cell 1 of My Notebook>
<Output of cell 2 of My Notebook>
done at 2025-12-12 14:09:14.497666
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.
Пример использования описан здесь.