Примеры использования
Базовые примеры загрузки датасетов через API.
Python
python
import requests
API_KEY = 'abn_xxxxxxxxxxxxxxxxxxxxx'
API_URL = 'https://workbench.ab-labz.com/api/v1'
with open('dataset.csv', 'rb') as f:
response = requests.post(
f'{API_URL}/datasets/upload/',
params={'experiment_id': 'homepage_test'},
headers={
'Authorization': f'Bearer {API_KEY}',
'Content-Type': 'text/csv'
},
data=f
)
response.raise_for_status()Bash
bash
curl -X POST "https://workbench.ab-labz.com/api/v1/datasets/upload/?experiment_id=homepage_test" \
-H "Authorization: Bearer abn_xxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: text/csv" \
--data-binary @dataset.csvGitHub Actions
yaml
name: Upload to AB-Labz
on:
push:
branches: [main]
jobs:
upload:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Upload dataset
run: |
curl -X POST "https://workbench.ab-labz.com/api/v1/datasets/upload/?experiment_id=homepage_test" \
-H "Authorization: Bearer ${{ secrets.ABLABZ_API_KEY }}" \
-H "Content-Type: text/csv" \
--data-binary @data/experiment.csvETL интеграция
Пример для систем вроде Airflow или cron. Используем витрину данных (см. Подготовка данных):
python
import requests
import pandas as pd
API_KEY = 'abn_xxxxxxxxxxxxxxxxxxxxx'
API_URL = 'https://workbench.ab-labz.com/api/v1'
# Получаем список активных экспериментов
# (те, у которых данные обновлялись вчера/сегодня)
active_experiments = pd.read_sql("""
SELECT DISTINCT experiment_id
FROM experiments_datamart
WHERE dt >= CURRENT_DATE - INTERVAL '1 day'
""", your_db_connection)
# Для каждого эксперимента: экспортируем данные и загружаем
for exp_id in active_experiments['experiment_id']:
# Экспорт данных из витрины
df = pd.read_sql(f"""
SELECT
user_id,
variant,
dt as date,
purchase_conversion,
revenue,
page_views
FROM experiments_datamart
WHERE experiment_id = '{exp_id}'
""", your_db_connection)
# Сохранение в CSV
csv_path = f'/tmp/{exp_id}.csv'
df.to_csv(csv_path, index=False)
# Загрузка в AB-Labz
with open(csv_path, 'rb') as f:
response = requests.post(
f'{API_URL}/datasets/upload/',
params={'experiment_id': exp_id},
headers={
'Authorization': f'Bearer {API_KEY}',
'Content-Type': 'text/csv'
},
data=f
)
response.raise_for_status()
print(f"Uploaded {exp_id}: {response.json()['size_mb']} MB")Airflow DAG
python
from airflow import DAG
from airflow.operators.python import PythonOperator
from datetime import datetime
import requests
import pandas as pd
def upload_active_experiments():
"""Загрузка всех активных экспериментов из витрины"""
API_KEY = os.getenv('ABLABZ_API_KEY')
API_URL = 'https://workbench.ab-labz.com/api/v1'
# Список экспериментов с данными за последние сутки
active_exps = pd.read_sql("""
SELECT DISTINCT experiment_id
FROM experiments_datamart
WHERE dt >= CURRENT_DATE - INTERVAL '1 day'
""", connection)
for exp_id in active_exps['experiment_id']:
# Экспорт всех данных эксперимента из витрины
df = pd.read_sql(f"""
SELECT user_id, variant, dt as date, purchase_conversion, revenue
FROM experiments_datamart
WHERE experiment_id = '{exp_id}'
""", connection)
csv_path = f'/tmp/{exp_id}.csv'
df.to_csv(csv_path, index=False)
with open(csv_path, 'rb') as f:
requests.post(
f'{API_URL}/datasets/upload/',
params={'experiment_id': exp_id},
headers={'Authorization': f'Bearer {API_KEY}', 'Content-Type': 'text/csv'},
data=f
).raise_for_status()
dag = DAG(
'ablabz_upload',
schedule_interval='0 3 * * *',
start_date=datetime(2025, 1, 1),
catchup=False
)
PythonOperator(
task_id='upload_experiments',
python_callable=upload_active_experiments,
dag=dag
)