Data Engineer. Лекция 5
Наливайте чай,
приветствуйте друг друга в чате и приготовьтесь хорошо провести время
Про что сегодня �
Наливайте чай,
приветствуйте друг друга в чате и приготовьтесь хорошо провести время
SQLite – локальная система управления базами данных
import sqlite3
conn = sqlite3.connect( "mydatabase.db" ) # или ":memory:" чтобы сохранить в RAM
cursor = conn.cursor()
# Создание таблицы
cursor.execute( "CREATE TABLE testtable ( id int, val text )" )
# Вставляем данные в таблицу
cursor.execute( "INSERT INTO testtable ( id, val ) VALUES ( 1, 'One' ) " )
cursor.execute( "INSERT INTO testtable ( id, val ) VALUES ( 2, 'Two' ) " )
# Сохраняем изменения
conn.commit()
SQLite – локальная система управления базами данных
import sqlite3
conn = sqlite3.connect( "mydatabase.db" ) # или ":memory:" чтобы сохранить в RAM
cursor = conn.cursor()
# Чтение таблицы
sql = "SELECT * FROM testtable"
cursor.execute( sql )
print( cursor.fetchall() ) # или fetchone() если нужно построчно
for row in cursor.execute( "SELECT * FROM testtable" ):
print( row )
SQLite – локальная система управления базами данных
Tickets | | Rides |
TicketID | | RideID |
Ticket_Date | | Ride_Date |
Person | | From_City |
Price | | To_City |
Ride | | |
Подключение к PostgreSQL
import psycopg2
conn = psycopg2.connect(database = "db",
host = "rc1b-o3ezvcgz5072sgar.mdb.yandexcloud.net",
user = "hseguest",
password = "hsepassword",
port = "6432")
conn.autocommit = False
cursor = conn.cursor()
Необходимо научиться делать три вещи:
Выполнение SQL в базе данных
# Выполнение SQL кода в базе данных без возврата результата
cursor.execute( "INSERT INTO public.testtable( id, val ) VALUES ( 1, 'ABC' )" )
conn.commit()
# Выполнение SQL кода в базе данных с возвратом результата
cursor.execute( "SELECT * FROM public.testtable" )
records = cursor.fetchall()
for row in records:
print( row )
# Закрываем соединение
cursor.close()
conn.close()
Change data capture (CDC) – захват данных
Способы отследить происходящие изменения:
Пробуем собрать ETL�на SCD1
План
1. Очистка стейджинговых таблиц
2. Захват данных из источника (измененных с момента последней загрузки) в стейджинг
3. Захват в стейджинг ключей из источника полным срезом для вычисления удалений.
4. Загрузка в приемник "вставок" на источнике (формат SCD1).
5. Обновление в приемнике "обновлений" на источнике (формат SCD1).
6. Удаление в приемнике удаленных в источнике записей (формат SCD1).
7. Обновление метаданных.
8. Фиксация транзакции.
А как же SCD2?
Обновим скрипт до SCD2 на следующем занятии
Система прав
rwxrwxrwx = 777 – объект доступен всем для любых действий, опасно
rwxr-xr-x = 755 – наиболее часто встречающаяся комбинация для исполняемых файлов
rw-rw-r-- = 664
rw-r--r-- = 644
r-------- = 400 – не делайте так!
--------- = 000 – и тем более так!
Система прав
Для изменения прав используется команда chmod
chmod [<опции>] <права> <файл>
<права> = <кому><что сделать><какие права>, например u+x, ugo-wx
chmod u+x <файл>
Cron
crontab –l
EDITOR=nano crontab -e
Cron
* * * * * выполняемая команда
- - - - -
| | | | |
| | | | ----- день недели (0—7) (воскресенье = 0 или 7)
| | | ------- месяц (1—12)
| | --------- день (1—31)
| ----------- час (0—23)
------------- минута (0—59)
Мониторинг и убийство процессов
top – показывает активные процессы и потребляемые ими ресурсы (в виде обновляемой таблицы).
ps – показывает статусы запущенных процессов
ps aux – показывает все процессы, даже отключенные от терминала, выводит имена пользователей
kill [<-signal>] <id процесса> – посылает процессу с указанным идентификатором сигнал
kill <id процесса>
kill -1 <id процесса>
kill -SIGHUP <id процесса>
kill -9 <id процесса>
kill –SIGKILL <id процесса>
Клиент psql
mkdir -p ~/.postgresql && \
wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" \
--output-document ~/.postgresql/root.crt && \
chmod 0600 ~/.postgresql/root.crt
psql "host=rc1b-o3ezvcgz5072sgar.mdb.yandexcloud.net \
port=6432 \
sslmode=verify-full \
dbname=db \
user=hseguest \
target_session_attrs=read-write"
Атрибуты для вывода: ранг и имя велосипедиста.
Проект!