Basic operations

In this tutorial, we will perform basic operations on demo data in Starburst Galaxy.

Prerequisites

This tutorial assumes you have completed the setup and connected to a database with the astronauts and missions demo data, including setup of a Python environment with Ibis and the Trino backend installed.

Code
import os
import ibis
from dotenv import load_dotenv

ibis.options.interactive = True

load_dotenv()

user = os.getenv("USERNAME")
password = os.getenv("PASSWORD")
host = os.getenv("HOSTNAME")
port = os.getenv("PORTNUMBER")
catalog = "sample"
schema = "demo"

con = ibis.trino.connect(
    user=user, password=password, host=host, port=port, database=catalog, schema=schema
)
con
1
Import necessary libraries.
2
Use Ibis in interactive mode.
3
Load environment variables.
4
Load secrets from environment variables.
5
Use the sample demo data.
6
Connect to Starburst Galaxy.
7
Display the connection object.
<ibis.backends.trino.Backend at 0x15508ecd0>

Load tables

Once you have a connection, you can assign tables to variables.

astronauts = con.table("astronauts")
missions = con.table("missions")
1
Create astonauts variable.
2
Create missions variable.

You can display slices of data:

astronauts[0:5]
1
Display the first 5 rows of the astronauts table.
┏━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ id     number  nationwide_number  name                 original_name            sex     year_of_birth  nationality     military_civilian  selection               year_of_selection  mission_number  total_number_of_missions  occupation  year_of_mission  mission_title    ascend_shuttle   in_orbit         descend_shuttle  hours_mission  total_hrs_sum  field21  eva_hrs_mission  total_eva_hrs ┃
┡━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ int32int32int32stringstringstringint32stringstringstringint32int32int32stringint32stringstringstringstringfloat64float64int32float64float64       │
├───────┼────────┼───────────────────┼─────────────────────┼─────────────────────────┼────────┼───────────────┼────────────────┼───────────────────┼────────────────────────┼───────────────────┼────────────────┼──────────────────────────┼────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼───────────────┼───────────────┼─────────┼─────────────────┼───────────────┤
│     111Gagarin, Yuri      ГАГАРИН Юрий Алексеевичmale  1934U.S.S.R/Russiamilitary         TsPK-1                196011pilot     1961Vostok 1       Vostok 1       Vostok 2       Vostok 3       1.771.7700.00.0 │
│     222Titov, Gherman     ТИТОВ Герман Степановичmale  1935U.S.S.R/Russiamilitary         TsPK-1                196011pilot     1961Vostok 2       Vostok 2       Vostok 2       Vostok 2       25.0025.3000.00.0 │
│     331Glenn, John H., Jr.Glenn, John H., Jr.    male  1921U.S.          military         NASA Astronaut Group 1195912pilot     1962MA-6           MA-6           MA-6           MA-6           5.00218.0000.00.0 │
│     431Glenn, John H., Jr.Glenn, John H., Jr.    male  1921U.S.          military         NASA Astronaut Group 2195922PSP       1998STS-95         STS-95         STS-95         STS-95         213.00218.0000.00.0 │
│     542Carpenter, M. ScottCarpenter, M. Scott    male  1925U.S.          military         NASA- 1               195911Pilot     1962Mercury-Atlas 7Mercury-Atlas 7Mercury-Atlas 7Mercury-Atlas 75.005.0000.00.0 │
└───────┴────────┴───────────────────┴─────────────────────┴─────────────────────────┴────────┴───────────────┴────────────────┴───────────────────┴────────────────────────┴───────────────────┴────────────────┴──────────────────────────┴────────────┴─────────────────┴─────────────────┴─────────────────┴─────────────────┴─────────────────┴───────────────┴───────────────┴─────────┴─────────────────┴───────────────┘
missions[0:5]
1
Display the first 5 rows of the missions table.
┏━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃ id     company_name  location                                                   date                        detail                                        status_rocket  cost     status_mission ┃
┡━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ int32stringstringstringstringstringfloat64string         │
├───────┼──────────────┼───────────────────────────────────────────────────────────┼────────────────────────────┼──────────────────────────────────────────────┼───────────────┼─────────┼────────────────┤
│     0SpaceX      LC-39A, Kennedy Space Center, Florida, USA               Fri Aug 07, 2020 05:12 UTCFalcon 9 Block 5 | Starlink V1 L9 & BlackSkyStatusActive 50.00Success        │
│     1CASC        Site 9401 (SLS-2), Jiuquan Satellite Launch Center, ChinaThu Aug 06, 2020 04:01 UTCLong March 2D | Gaofen-9 04 & Q-SAT         StatusActive 29.75Success        │
│     2SpaceX      Pad A, Boca Chica, Texas, USA                            Tue Aug 04, 2020 23:57 UTCStarship Prototype | 150 Meter Hop          StatusActive nanSuccess        │
│     3Roscosmos   Site 200/39, Baikonur Cosmodrome, Kazakhstan             Thu Jul 30, 2020 21:25 UTCProton-M/Briz-M | Ekspress-80 & Ekspress-103StatusActive 65.00Success        │
│     4ULA         SLC-41, Cape Canaveral AFS, Florida, USA                 Thu Jul 30, 2020 11:50 UTCAtlas V 541 | Perseverance                  StatusActive 145.00Success        │
└───────┴──────────────┴───────────────────────────────────────────────────────────┴────────────────────────────┴──────────────────────────────────────────────┴───────────────┴─────────┴────────────────┘

Table schemas

You can view the schemas of the tables:

astronauts.schema()
1
Display the schema of the astronauts table.
ibis.Schema {
  id                        int32
  number                    int32
  nationwide_number         int32
  name                      string
  original_name             string
  sex                       string
  year_of_birth             int32
  nationality               string
  military_civilian         string
  selection                 string
  year_of_selection         int32
  mission_number            int32
  total_number_of_missions  int32
  occupation                string
  year_of_mission           int32
  mission_title             string
  ascend_shuttle            string
  in_orbit                  string
  descend_shuttle           string
  hours_mission             float64
  total_hrs_sum             float64
  field21                   int32
  eva_hrs_mission           float64
  total_eva_hrs             float64
}
missions.schema()
1
Display the schema of the missions table.
ibis.Schema {
  id              int32
  company_name    string
  location        string
  date            string
  detail          string
  status_rocket   string
  cost            float64
  status_mission  string
}

Selecting columns

With Ibis, you can run SQL-like queries on your tables. For example, you can select specific columns from a table:

t = astronauts.select("name", "nationality", "mission_title", "mission_number", "hours_mission")
t.head(3)
1
Select specific columns from the astronauts table.
2
Display the results.
┏━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ name                 nationality     mission_title  mission_number  hours_mission ┃
┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ stringstringstringint32float64       │
├─────────────────────┼────────────────┼───────────────┼────────────────┼───────────────┤
│ Gagarin, Yuri      U.S.S.R/RussiaVostok 1     11.77 │
│ Titov, Gherman     U.S.S.R/RussiaVostok 2     125.00 │
│ Glenn, John H., Jr.U.S.          MA-6         15.00 │
└─────────────────────┴────────────────┴───────────────┴────────────────┴───────────────┘

And from the missions table:

t = missions.select("company_name", "status_rocket", "cost", "status_mission")
t.head(3)
1
Select specific columns from the missions table.
2
Display the results.
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃ company_name  status_rocket  cost     status_mission ┃
┡━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ stringstringfloat64string         │
├──────────────┼───────────────┼─────────┼────────────────┤
│ SpaceX      StatusActive 50.00Success        │
│ CASC        StatusActive 29.75Success        │
│ SpaceX      StatusActive nanSuccess        │
└──────────────┴───────────────┴─────────┴────────────────┘

You can also apply filters to your queries:

t = astronauts.filter(~astronauts["nationality"].like("U.S.%"))
t.head(3)
1
Filter astronauts table by nationality.
2
Display the results.
┏━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ id     number  nationwide_number  name                       original_name             sex     year_of_birth  nationality  military_civilian  selection               year_of_selection  mission_number  total_number_of_missions  occupation       year_of_mission  mission_title  ascend_shuttle  in_orbit  descend_shuttle  hours_mission  total_hrs_sum  field21  eva_hrs_mission  total_eva_hrs ┃
┡━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ int32int32int32stringstringstringint32stringstringstringint32int32int32stringint32stringstringstringstringfloat64float64int32float64float64       │
├───────┼────────┼───────────────────┼───────────────────────────┼──────────────────────────┼────────┼───────────────┼─────────────┼───────────────────┼────────────────────────┼───────────────────┼────────────────┼──────────────────────────┼─────────────────┼─────────────────┼───────────────┼────────────────┼──────────┼─────────────────┼───────────────┼───────────────┼─────────┼─────────────────┼───────────────┤
│    681011Jugderdemidiin GurragchaaЖүгдэрдэмидийн Гүррагчааmale  1947Mongolia   civilian         1978 Intercosmos Group197811flight engineer1981Soyuz 39     Soyuz 39      Soyuz 39Soyuz 39       188.7188.7000.00.00 │
│    731031Dumitru Prunariu         Dumitru-Dorin Prunariu  male  1952Romania    civilian         1978 Intercosmos Group197811MSP            1981Soyuz 40     Soyuz 40      Soyuz 40Soyuz 40       188.7188.7000.00.00 │
│    811081Chrétien, Jean-Loup      Chrétien, Jean-Loup     male  1938France     military         CNES-1                198013MSP            1982Salyut 7     Soyuz T-6     Salyut 7Soyuz T-6      190.01043.3200.05.95 │
└───────┴────────┴───────────────────┴───────────────────────────┴──────────────────────────┴────────┴───────────────┴─────────────┴───────────────────┴────────────────────────┴───────────────────┴────────────────┴──────────────────────────┴─────────────────┴─────────────────┴───────────────┴────────────────┴──────────┴─────────────────┴───────────────┴───────────────┴─────────┴─────────────────┴───────────────┘

And in the missions table:

t = missions.filter(missions["status_mission"] == "Failure")
t.head(3)
1
Filter missions table by mission status.
2
Display the results.
┏━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃ id     company_name  location                                                 date                        detail                                       status_rocket  cost     status_mission ┃
┡━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ int32stringstringstringstringstringfloat64string         │
├───────┼──────────────┼─────────────────────────────────────────────────────────┼────────────────────────────┼─────────────────────────────────────────────┼───────────────┼─────────┼────────────────┤
│    11ExPace      Site 95, Jiuquan Satellite Launch Center, China        Fri Jul 10, 2020 04:17 UTCKuaizhou 11 | Jilin-1 02E, CentiSpace-1 S2 StatusActive 28.3Failure        │
│    15Rocket Lab  Rocket Lab LC-1A, M?\x81hia Peninsula, New Zealand     Sat Jul 04, 2020 21:19 UTCElectron/Curie | Pics Or It Didn??¦t HappenStatusActive 7.5Failure        │
│    27Virgin OrbitCosmic Girl, Mojave Air and Space Port, California, USAMon May 25, 2020 19:50 UTCLauncherOne | Demo Flight                  StatusActive 12.0Failure        │
└───────┴──────────────┴─────────────────────────────────────────────────────────┴────────────────────────────┴─────────────────────────────────────────────┴───────────────┴─────────┴────────────────┘

Mutating columns

t = missions.mutate(date=ibis.coalesce(ibis._["date"], None))
t = t.order_by(t["date"].asc())
t.head(3)
1
Mutate the date column.
2
Order the results by the date column.
3
Display the results.
┏━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃ id     company_name  location                                           date                        detail                        status_rocket  cost     status_mission ┃
┡━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ int32stringstringstringstringstringfloat64string         │
├───────┼──────────────┼───────────────────────────────────────────────────┼────────────────────────────┼──────────────────────────────┼───────────────┼─────────┼────────────────┤
│  4268US Air ForceSLC-17A, Cape Canaveral AFS, Florida, USA        Fri Apr 01, 1960 11:40 UTCThor DM-18 Able-II | TIROS-1StatusRetirednanSuccess        │
│  3366RVSN USSR   Site 43/3, Plesetsk Cosmodrome, Russia           Fri Apr 02, 1971 08:20 UTCVoskhod | Cosmos 403        StatusRetirednanSuccess        │
│  1262Arianespace ELA-2, Guiana Space Centre, French Guiana, FranceFri Apr 02, 1999 22:03 UTCAriane 42P | Insat-2E       StatusRetirednanSuccess        │
└───────┴──────────────┴───────────────────────────────────────────────────┴────────────────────────────┴──────────────────────────────┴───────────────┴─────────┴────────────────┘

Aggregating and grouping results

Ibis also supports aggregate functions and grouping. For example, you can count the number of rows in a table and group the results by a specific column:

t = astronauts.filter(~astronauts["nationality"].like("U.S.%")).agg(
    [
        ibis._.count().name("number_trips"),
        ibis._["hours_mission"].max().name("longest_time"),
        ibis._["hours_mission"].min().name("shortest_time"),
    ]
)
t.head(3)
1
Filter the astronauts table.
2
Aggregate the results.
3
Display the results.
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ number_trips  longest_time  shortest_time ┃
┡━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ int64float64float64       │
├──────────────┼──────────────┼───────────────┤
│          1496902.3521.0 │
└──────────────┴──────────────┴───────────────┘

You can add a group by:

t = (
    astronauts.filter(~astronauts["nationality"].like("U.S.%"))
    .group_by("nationality")
    .agg(
        [
            ibis._.count().name("number_trips"),
            ibis._["hours_mission"].max().name("longest_time"),
            ibis._["hours_mission"].min().name("shortest_time"),
        ]
    )
)
t.head(3)
1
Filter the astronauts table.
2
Group by nationality.
3
Aggregate the results.
4
Display the results.
┏━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ nationality  number_trips  longest_time  shortest_time ┃
┡━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ stringint64float64float64       │
├─────────────┼──────────────┼──────────────┼───────────────┤
│ Mongolia   1188.70188.7 │
│ Romania    1188.70188.7 │
│ France     184721.83118.8 │
└─────────────┴──────────────┴──────────────┴───────────────┘

And order the results by ‘number_trips’ and ‘longest_time’ in descending order:

t = (
    astronauts.filter(~astronauts["nationality"].like("U.S.%"))
    .group_by("nationality")
    .agg(
        [
            ibis._.count().name("number_trips"),
            ibis._["hours_mission"].max().name("longest_time"),
            ibis._["hours_mission"].min().name("shortest_time"),
        ]
    )
    .order_by([ibis.desc("number_trips"), ibis.desc("longest_time")])
)
t.head(3)
1
Filter the astronauts table.
2
Group by nationality.
3
Aggregate the results.
4
Order the result.
5
Display the results.
┏━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ nationality  number_trips  longest_time  shortest_time ┃
┡━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ stringint64float64float64       │
├─────────────┼──────────────┼──────────────┼───────────────┤
│ Japan      206902.35189.90 │
│ Canada     184887.00193.77 │
│ France     184721.83118.80 │
└─────────────┴──────────────┴──────────────┴───────────────┘

For the missions table, you can group by ‘company_name’ and ‘status_rocket’, and then sum the ‘cost’:

t = (
    missions.filter(missions["status_mission"] == "Failure")
    .group_by(["company_name", "status_rocket"])
    .agg(ibis._["cost"].sum().name("cost"))
    .order_by(ibis.desc("cost"))
)
t.head(3)
1
Filter the missions table.
2
Group by company_name and status_rocket.
3
Aggregate the results.
4
Order the results.
5
Display the results.
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━┓
┃ company_name  status_rocket  cost    ┃
┡━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━┩
│ stringstringfloat64 │
├──────────────┼───────────────┼─────────┤
│ NASA        StatusRetired900.0 │
│ Northrop    StatusActive 255.0 │
│ Arianespace StatusActive 237.0 │
└──────────────┴───────────────┴─────────┘

Writing tables

Finally, let’s write a table back to Starburst Galaxy.

Warning

You cannot write to the sample catalog; uncomment the code and write to a catalog you have write access to.

#con.create_table("t", t, overwrite=True)

Next steps

Now that you’ve connected to Starburst Galaxy and learned the basics, you can query your own data. See the rest of the Ibis documentation or Starburst Galaxy documentation. You can open an issue if you run into one!

Back to top