Writing GarfReport
garf-io
library is reponsible for writing GarfReport
to various local/remote storages.
CLI identifier | Writer Class | Options |
---|---|---|
console |
ConsoleWriter | page-size=10 ,format=table|json|jsonl |
csv |
CsvWriter | destination-folder |
json |
JsonWriter | destination-folder ,format=json|jsonl |
bq |
BigQueryWriter | project , dataset , location , write-disposition |
sqldb |
SqlAlchemyWriter | connection-string , if-exists=fail|replace|append |
sheets |
SheetsWriter | share-with , credentials-file , spreadsheet-url , is_append=True|False |
Installation
pip install garf-io
uv pip install garf-io
By default garf-io
has only support for console
, csv
and json
writers.
To install all writers use the following command pip install garf-io[all]
.
To install specific writers use:
pip install garf-io[bq]
for BigQuery supportpip install garf-io[sheets]
for Google spreadsheets supportpip install garf-io[sqlalchemy]
for SqlAlchemy support
Usage
Note
To use cli
example you need to have garf-executors
package installed.
pip install garf-executors
garf query.sql --source API_SOURCE \
--output YOUR_WRITER
from garf_core import report
from garf_io import writer
# Create example report
sample_report = report.GarfReport(results=[[1]], column_names=['one'])
concrete_writer = writer.create_writer('YOUR_WRITER')
concrete_writer.write(sample_report, 'query')
Console
console
writer allows you to print GarfReport
to standard output in the terminal.
garf query.sql --source API_SOURCE \
--output console
from garf_core import report
from garf_io.writers import console_writer
# Create example report
sample_report = report.GarfReport(results=[[1]], column_names=['one'])
writer = console_writer.ConsoleWriter()
writer.write(sample_report, 'query')
Format
For console
writer you can specify the output format:
table
- rich table (default).json
- JSON.jsonl
- JSON lines
garf query.sql --source API_SOURCE \
--output console \
--console.format=json
from garf_core import report
from garf_io.writers import console_writer
# Create example report
sample_report = report.GarfReport(results=[[1]], column_names=['one'])
writer = console_writer.ConsoleWriter(format='json')
writer.write(sample_report, 'query')
Page size
If you're using console
writer with table
format option, you can specify
page_size
parameter to print N rows to the console.
garf query.sql --source API_SOURCE \
--output console \
--console.page-size=100
from garf_core import report
from garf_io.writers import console_writer
# Create example report
sample_report = report.GarfReport(results=[[1]], column_names=['one'])
writer = console_writer.ConsoleWriter(page_size=100)
writer.write(sample_report, 'query')
CSV
csv
writer allows you to save GarfReport
as a CSV file to local or remote storage.
garf query.sql --source API_SOURCE \
--output csv
from garf_core import report
from garf_io.writers import csv_writer
# Create example report
sample_report = report.GarfReport(results=[[1]], column_names=['one'])
writer = csv_writer.CsvWriter()
writer.write(sample_report, 'query')
Destination folder
For csv
writer you can specify the local or remote folder to store results.
I.e. if you want to write results to Google Cloud Storage bucket gs://PROJECT_ID/bucket
,
you need to provide destination_folder
parameter.
garf query.sql --source API_SOURCE \
--output csv \
--csv.destination-folder=gs://PROJECT_ID/bucket
from garf_core import report
from garf_io.writers import csv_writer
# Create example report
sample_report = report.GarfReport(results=[[1]], column_names=['one'])
writer = csv_writer.CsvWriter(destination_folder='gs://PROJECT_ID/bucket/')
writer.write(sample_report, 'query')
JSON
json
writer allows you to save GarfReport
as JSON or JSONL file to local or remote storage.
garf query.sql --source API_SOURCE \
--output json
from garf_core import report
from garf_io.writers import json_writer
# Create example report
sample_report = report.GarfReport(results=[[1]], column_names=['one'])
writer = json_writer.JsonWriter()
writer.write(sample_report, 'query')
Destination folder
You can specify the local or remote folder to store results.
I.e. if you want to write results to Google Cloud Storage bucket gs://PROJECT_ID/bucket
,
you need to provide destination_folder
parameter.
garf query.sql --source API_SOURCE \
--output json \
--json.destination-folder=gs://PROJECT_ID/bucket
from garf_core import report
from garf_io.writers import json_writer
# Create example report
sample_report = report.GarfReport(results=[[1]], column_names=['one'])
writer = json_writer.JsonWriter(destination_folder='gs://PROJECT_ID/bucket/')
writer.write(sample_report, 'query')
Format
You can specify the output format:
json
- JSON (default)jsonl
- JSON lines
garf query.sql --source API_SOURCE \
--output json \
--json.format=jsonl
from garf_core import report
from garf_io.writers import json_writer
# Create example report
sample_report = report.GarfReport(results=[[1]], column_names=['one'])
writer = json_writer.JsonWriter(format='jsonl')
writer.write(sample_report, 'query')
BigQuery
Important
To save data to BigQuery install garf-io
with BigQuery support
pip install garf-io[bq]
bq
writer allows you to save GarfReport
to BigQuery table.
garf query.sql --source API_SOURCE \
--output bq
from garf_core import report
from garf_io.writers import bigquery_writer
# Create example report
sample_report = report.GarfReport(results=[[1]], column_names=['one'])
writer = bigquery_writer.BigQueryWriter()
writer.write(sample_report, 'query')
Project
By default reports are saved to GOOGLE_CLOUD_PROJECT
.
You can overwrite it with project
parameter.
garf query.sql --source API_SOURCE \
--output bq \
--bq.project=PROJECT_ID
from garf_core import report
from garf_io.writers import bigquery_writer
# Create example report
sample_report = report.GarfReport(results=[[1]], column_names=['one'])
writer = bigquery_writer.BigQueryWriter(project="PROJECT_ID")
writer.write(sample_report, 'query')
Dataset
By default reports are saved to garf
dataset.
You can overwrite it with dataset
parameter.
garf query.sql --source API_SOURCE \
--output bq \
--bq.dataset=DATASET
from garf_core import report
from garf_io.writers import bigquery_writer
# Create example report
sample_report = report.GarfReport(results=[[1]], column_names=['one'])
writer = bigquery_writer.BigQueryWriter(dataset="DATASET")
writer.write(sample_report, 'query')
Location
By default reports are saved to US
location.
You can overwrite it with location
parameter.
garf query.sql --source API_SOURCE \
--output bq \
--bq.location=LOCATION
from garf_core import report
from garf_io.writers import bigquery_writer
# Create example report
sample_report = report.GarfReport(results=[[1]], column_names=['one'])
writer = bigquery_writer.BigQueryWriter(location="LOCATION")
writer.write(sample_report, 'query')
Write disposition
By default reports overwrite any existing data.
You can overwrite it with write_disposition
parameter.
garf query.sql --source API_SOURCE \
--output bq \
--bq.write_disposition=DISPOSITION
from garf_core import report
from garf_io.writers import bigquery_writer
# Create example report
sample_report = report.GarfReport(results=[[1]], column_names=['one'])
writer = bigquery_writer.BigQueryWriter(write_disposition="DISPOSITION")
writer.write(sample_report, 'query')
Google Sheets
Important
To save data to Google Sheets install garf-io
with Google Sheets support
pip install garf-io[sheets]
sheets
writer allows you to save GarfReport
to Google Sheets.
garf query.sql --source API_SOURCE \
--output sheets
from garf_core import report
from garf_io.writers import sheets_writer
# Create example report
sample_report = report.GarfReport(results=[[1]], column_names=['one'])
writer = sheets_writer.SheetsWriter()
writer.write(sample_report, 'query')
SqlAlchemy
Important
To save data to Google Sheets install garf-io
with SqlAlchemy support
pip install garf-io[sqlalchemy]
sqldb
writer allows you to save GarfReport
to SqlAlchemy supported table databases.
garf query.sql --source API_SOURCE \
--output sqldb
from garf_core import report
from garf_io.writers import sqldb_writer
# Create example report
sample_report = report.GarfReport(results=[[1]], column_names=['one'])
writer = sqldb_writer.SqlAlchemyWriter(
connection_string=SQLALCHEMY_CONNECTION_STRING
)
writer.write(sample_report, 'query')
Configuration
Each of writer also support two options for dealing with arrays:
WRITER.array-handling
- arrays handling method: "strings" (default) - store arrays as strings (items combined via a separator, e.g. "item1|item2"), "arrays" - store arrays as arrays.WRITER.array-separator
- a separator symbol for joining arrays as strings, by default '|'.