Skip to main content

Load Star Trek Data to Redshift Using dlt in Python

Need help deploying these pipelines, or figuring out how to run them in your data stack?

Join our Slack community or book a call with our support engineer Violetta.

This guide provides step-by-step instructions for loading data from the Star Trek universe into Redshift using the open-source Python library dlt. Star Trek is a science fiction media franchise with a comprehensive database accessible via the STAPI, which includes information on characters, performers, species, episodes, spacecraft, books, astronomical objects, and video releases. Redshift is Amazon's fully managed, petabyte-scale data warehouse service in the cloud, capable of scaling from a few hundred gigabytes to a petabyte or more. By leveraging dlt, you can efficiently transfer and manage Star Trek data within Redshift. For more details on the Star Trek API, visit STAPI.

dlt Key Features

  • Pipeline Metadata: dlt pipelines leverage metadata to provide governance capabilities. This metadata includes load IDs, which consist of a timestamp and pipeline name. Load IDs enable incremental transformations and data vaulting by tracking data loads and facilitating data lineage and traceability. Read more about lineage.

  • Schema Enforcement and Curation: dlt empowers users to enforce and curate schemas, ensuring data consistency and quality. Schemas define the structure of normalized data and guide the processing and loading of data. Read more about adjusting a schema.

  • Schema Evolution: dlt enables proactive governance by alerting users to schema changes. When modifications occur in the source data’s schema, such as table or column alterations, dlt notifies stakeholders, allowing them to take necessary actions. Learn more about schema evolution.

  • Scaling and Finetuning: dlt offers several mechanisms and configuration options to scale up and finetune pipelines, such as running extraction, normalization, and load in parallel. Read more about performance.

  • Advanced Topics: dlt is a constantly growing library that supports many features and use cases needed by the community. Join our Slack to find recent releases or discuss what you can build with dlt.

Getting started with your pipeline locally

OpenAPI Source Generator dlt-init-openapi

This walkthrough makes use of the dlt-init-openapi generator cli tool. You can read more about it here. The code generated by this tool uses the dlt rest_api verified source, docs for this are here.

0. Prerequisites

dlt and dlt-init-openapi requires Python 3.9 or higher. Additionally, you need to have the pip package manager installed, and we recommend using a virtual environment to manage your dependencies. You can learn more about preparing your computer for dlt in our installation reference.

1. Install dlt and dlt-init-openapi

First you need to install the dlt-init-openapi cli tool.

pip install dlt-init-openapi

The dlt-init-openapi cli is a powerful generator which you can use to turn any OpenAPI spec into a dlt source to ingest data from that api. The quality of the generator source is dependent on how well the API is designed and how accurate the OpenAPI spec you are using is. You may need to make tweaks to the generated code, you can learn more about this here.

# generate pipeline
# NOTE: add_limit adds a global limit, you can remove this later
# NOTE: you will need to select which endpoints to render, you
# can just hit Enter and all will be rendered.
dlt-init-openapi startrek --url https://raw.githubusercontent.com/dlt-hub/openapi-specs/main/open_api_specs/Public/star_treck.yaml --global-limit 2
cd startrek_pipeline
# install generated requirements
pip install -r requirements.txt

The last command will install the required dependencies for your pipeline. The dependencies are listed in the requirements.txt:

dlt>=0.4.12

You now have the following folder structure in your project:

startrek_pipeline/
├── .dlt/
│ ├── config.toml # configs for your pipeline
│ └── secrets.toml # secrets for your pipeline
├── rest_api/ # The rest api verified source
│ └── ...
├── startrek/
│ └── __init__.py # TODO: possibly tweak this file
├── startrek_pipeline.py # your main pipeline script
├── requirements.txt # dependencies for your pipeline
└── .gitignore # ignore files for git (not required)

1.1. Tweak startrek/__init__.py

This file contains the generated configuration of your rest_api. You can continue with the next steps and leave it as is, but you might want to come back here and make adjustments if you need your rest_api source set up in a different way. The generated file for the startrek source will look like this:

Click to view full file (1727 lines)

from typing import List

import dlt
from dlt.extract.source import DltResource
from rest_api import rest_api_source
from rest_api.typing import RESTAPIConfig


@dlt.source(name="startrek_source", max_table_nesting=2)
def startrek_source(
base_url: str = dlt.config.value,
) -> List[DltResource]:

# source configuration
source_config: RESTAPIConfig = {
"client": {
"base_url": base_url,
},
"resources":
[
# Pagination over animals
{
"name": "v1_rest_animal_search",
"table_name": "animal_base",
"endpoint": {
"data_selector": "animals",
"path": "/v1/rest/animal/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single animal
{
"name": "v1_rest_animal",
"table_name": "animal_full",
"endpoint": {
"data_selector": "animal",
"path": "/v1/rest/animal",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single astronomical object
{
"name": "v_1_rest_astronomical_object",
"table_name": "astronomical_object_base",
"endpoint": {
"data_selector": "astronomicalObject.astronomicalObjects",
"path": "/v1/rest/astronomicalObject",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over astronomical objects
{
"name": "v_1_rest_astronomical_object_search",
"table_name": "astronomical_object_base",
"endpoint": {
"data_selector": "astronomicalObjects",
"path": "/v1/rest/astronomicalObject/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single astronomical object (V2)
{
"name": "v_2_rest_astronomical_object",
"table_name": "astronomical_object_v2_base",
"endpoint": {
"data_selector": "astronomicalObject.astronomicalObjects",
"path": "/v2/rest/astronomicalObject",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over astronomical objects (V2)
{
"name": "v_2_rest_astronomical_object_search",
"table_name": "astronomical_object_v2_base",
"endpoint": {
"data_selector": "astronomicalObjects",
"path": "/v2/rest/astronomicalObject/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over books
{
"name": "v1_rest_book_search",
"table_name": "book_base",
"endpoint": {
"data_selector": "books",
"path": "/v1/rest/book/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over book collections
{
"name": "v_1_rest_book_collection_search",
"table_name": "book_collection_base",
"endpoint": {
"data_selector": "bookCollections",
"path": "/v1/rest/bookCollection/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single book
{
"name": "v1_rest_book",
"table_name": "book_series_base",
"endpoint": {
"data_selector": "book.bookSeries",
"path": "/v1/rest/book",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single book (V2)
{
"name": "v2_rest_book",
"table_name": "book_series_base",
"endpoint": {
"data_selector": "book.bookSeries",
"path": "/v2/rest/book",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single book collection
{
"name": "v_1_rest_book_collection",
"table_name": "book_series_base",
"endpoint": {
"data_selector": "bookCollection.bookSeries",
"path": "/v1/rest/bookCollection",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single book series
{
"name": "v_1_rest_book_series",
"table_name": "book_series_base",
"endpoint": {
"data_selector": "bookSeries.parentSeries",
"path": "/v1/rest/bookSeries",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over book series
{
"name": "v_1_rest_book_series_search",
"table_name": "book_series_base",
"endpoint": {
"data_selector": "bookSeries",
"path": "/v1/rest/bookSeries/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over books (V2)
{
"name": "v2_rest_book_search",
"table_name": "book_v2_base",
"endpoint": {
"data_selector": "books",
"path": "/v2/rest/book/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over characters
{
"name": "v1_rest_character_search",
"table_name": "character_base",
"endpoint": {
"data_selector": "characters",
"path": "/v1/rest/character/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single occupation
{
"name": "v1_rest_occupation",
"table_name": "character_base",
"endpoint": {
"data_selector": "occupation.characters",
"path": "/v1/rest/occupation",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single occupation (V2)
{
"name": "v2_rest_occupation",
"table_name": "character_base",
"endpoint": {
"data_selector": "occupation.characters",
"path": "/v2/rest/occupation",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single organization
{
"name": "v1_rest_organization",
"table_name": "character_base",
"endpoint": {
"data_selector": "organization.characters",
"path": "/v1/rest/organization",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single species
{
"name": "v1_rest_species",
"table_name": "character_base",
"endpoint": {
"data_selector": "species.characters",
"path": "/v1/rest/species",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single species (V2)
{
"name": "v2_rest_species",
"table_name": "character_base",
"endpoint": {
"data_selector": "species.characters",
"path": "/v2/rest/species",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single title
{
"name": "v1_rest_title",
"table_name": "character_base",
"endpoint": {
"data_selector": "title.characters",
"path": "/v1/rest/title",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single title (V2)
{
"name": "v2_rest_title",
"table_name": "character_base",
"endpoint": {
"data_selector": "title.characters",
"path": "/v2/rest/title",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over comic collections
{
"name": "v_1_rest_comic_collection_search",
"table_name": "comic_collection_base",
"endpoint": {
"data_selector": "comicCollections",
"path": "/v1/rest/comicCollection/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single comics
{
"name": "v1_rest_comics",
"table_name": "comic_series_base",
"endpoint": {
"data_selector": "comics.comicSeries",
"path": "/v1/rest/comics",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single comic collection
{
"name": "v_1_rest_comic_collection",
"table_name": "comic_series_base",
"endpoint": {
"data_selector": "comicCollection.comicSeries",
"path": "/v1/rest/comicCollection",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single comic collection (V2)
{
"name": "v_2_rest_comic_collection",
"table_name": "comic_series_base",
"endpoint": {
"data_selector": "comicCollection.comicSeries",
"path": "/v2/rest/comicCollection",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single comic series
{
"name": "v_1_rest_comic_series",
"table_name": "comic_series_base",
"endpoint": {
"data_selector": "comicSeries.parentSeries",
"path": "/v1/rest/comicSeries",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over comic series
{
"name": "v_1_rest_comic_series_search",
"table_name": "comic_series_base",
"endpoint": {
"data_selector": "comicSeries",
"path": "/v1/rest/comicSeries/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single comic strip
{
"name": "v_1_rest_comic_strip",
"table_name": "comic_series_base",
"endpoint": {
"data_selector": "comicStrip.comicSeries",
"path": "/v1/rest/comicStrip",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over comic strips
{
"name": "v_1_rest_comic_strip_search",
"table_name": "comic_strip_base",
"endpoint": {
"data_selector": "comicStrips",
"path": "/v1/rest/comicStrip/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over comics
{
"name": "v1_rest_comics_search",
"table_name": "comics_base",
"endpoint": {
"data_selector": "comics",
"path": "/v1/rest/comics/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over companies
{
"name": "v1_rest_company_search",
"table_name": "company_base",
"endpoint": {
"data_selector": "companies",
"path": "/v1/rest/company/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single magazine series
{
"name": "v_1_rest_magazine_series",
"table_name": "company_base",
"endpoint": {
"data_selector": "magazineSeries.publishers",
"path": "/v1/rest/magazineSeries",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single soundtrack
{
"name": "v1_rest_soundtrack",
"table_name": "company_base",
"endpoint": {
"data_selector": "soundtrack.labels",
"path": "/v1/rest/soundtrack",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single trading card set
{
"name": "v_1_rest_trading_card_set",
"table_name": "company_base",
"endpoint": {
"data_selector": "tradingCardSet.manufacturers",
"path": "/v1/rest/tradingCardSet",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single video game
{
"name": "v_1_rest_video_game",
"table_name": "company_base",
"endpoint": {
"data_selector": "videoGame.publishers",
"path": "/v1/rest/videoGame",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single company
{
"name": "v1_rest_company",
"table_name": "company_full",
"endpoint": {
"data_selector": "company",
"path": "/v1/rest/company",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over companies (V2)
{
"name": "v2_rest_company_search",
"table_name": "company_v2_base",
"endpoint": {
"data_selector": "companies",
"path": "/v2/rest/company/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single company (V2)
{
"name": "v2_rest_company",
"table_name": "company_v2_full",
"endpoint": {
"data_selector": "company",
"path": "/v2/rest/company",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over conflicts
{
"name": "v1_rest_conflict_search",
"table_name": "conflict_base",
"endpoint": {
"data_selector": "conflicts",
"path": "/v1/rest/conflict/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a data version
{
"name": "v_1_rest_common_data_version",
"table_name": "data_version",
"endpoint": {
"data_selector": "$",
"path": "/v1/rest/common/dataVersion",
"paginator": "auto",
}
},
# Pagination over elements
{
"name": "v1_rest_element_search",
"table_name": "element_base",
"endpoint": {
"data_selector": "elements",
"path": "/v1/rest/element/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single element
{
"name": "v1_rest_element",
"table_name": "element_full",
"endpoint": {
"data_selector": "element",
"path": "/v1/rest/element",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over elements (V2)
{
"name": "v2_rest_element_search",
"table_name": "element_v2_base",
"endpoint": {
"data_selector": "elements",
"path": "/v2/rest/element/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single element (V2)
{
"name": "v2_rest_element",
"table_name": "element_v2_full",
"endpoint": {
"data_selector": "element",
"path": "/v2/rest/element",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over episodes
{
"name": "v1_rest_episode_search",
"table_name": "episode_base",
"endpoint": {
"data_selector": "episodes",
"path": "/v1/rest/episode/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single performer
{
"name": "v1_rest_performer",
"table_name": "episode_base",
"endpoint": {
"data_selector": "performer.episodesPerformances",
"path": "/v1/rest/performer",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single performer (V2)
{
"name": "v2_rest_performer",
"table_name": "episode_base",
"endpoint": {
"data_selector": "performer.episodesPerformances",
"path": "/v2/rest/performer",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single season
{
"name": "v1_rest_season",
"table_name": "episode_base",
"endpoint": {
"data_selector": "season.episodes",
"path": "/v1/rest/season",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single series
{
"name": "v1_rest_series",
"table_name": "episode_base",
"endpoint": {
"data_selector": "series.episodes",
"path": "/v1/rest/series",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single staff member
{
"name": "v1_rest_staff",
"table_name": "episode_base",
"endpoint": {
"data_selector": "staff.writtenEpisodes",
"path": "/v1/rest/staff",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single staff member (V2)
{
"name": "v2_rest_staff",
"table_name": "episode_base",
"endpoint": {
"data_selector": "staff.writtenEpisodes",
"path": "/v2/rest/staff",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over foods
{
"name": "v1_rest_food_search",
"table_name": "food_base",
"endpoint": {
"data_selector": "foods",
"path": "/v1/rest/food/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single food
{
"name": "v1_rest_food",
"table_name": "food_full",
"endpoint": {
"data_selector": "food",
"path": "/v1/rest/food",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over literature
{
"name": "v1_rest_literature_search",
"table_name": "literature_base",
"endpoint": {
"data_selector": "literature",
"path": "/v1/rest/literature/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single literature
{
"name": "v1_rest_literature",
"table_name": "literature_full",
"endpoint": {
"data_selector": "literature",
"path": "/v1/rest/literature",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single conflict
{
"name": "v1_rest_conflict",
"table_name": "location_base",
"endpoint": {
"data_selector": "conflict.locations",
"path": "/v1/rest/conflict",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single conflict (V2)
{
"name": "v2_rest_conflict",
"table_name": "location_base",
"endpoint": {
"data_selector": "conflict.locations",
"path": "/v2/rest/conflict",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over locations
{
"name": "v1_rest_location_search",
"table_name": "location_base",
"endpoint": {
"data_selector": "locations",
"path": "/v1/rest/location/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single location
{
"name": "v1_rest_location",
"table_name": "location_full",
"endpoint": {
"data_selector": "location",
"path": "/v1/rest/location",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over locations (V2)
{
"name": "v2_rest_location_search",
"table_name": "location_v2_base",
"endpoint": {
"data_selector": "locations",
"path": "/v2/rest/location/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single location (V2)
{
"name": "v2_rest_location",
"table_name": "location_v2_full",
"endpoint": {
"data_selector": "location",
"path": "/v2/rest/location",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over magazines
{
"name": "v1_rest_magazine_search",
"table_name": "magazine_base",
"endpoint": {
"data_selector": "magazines",
"path": "/v1/rest/magazine/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single magazine
{
"name": "v1_rest_magazine",
"table_name": "magazine_series_base",
"endpoint": {
"data_selector": "magazine.magazineSeries",
"path": "/v1/rest/magazine",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over magazine series
{
"name": "v_1_rest_magazine_series_search",
"table_name": "magazine_series_base",
"endpoint": {
"data_selector": "magazineSeries",
"path": "/v1/rest/magazineSeries/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over materials
{
"name": "v1_rest_material_search",
"table_name": "material_base",
"endpoint": {
"data_selector": "materials",
"path": "/v1/rest/material/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single material
{
"name": "v1_rest_material",
"table_name": "material_full",
"endpoint": {
"data_selector": "material",
"path": "/v1/rest/material",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over medical conditions
{
"name": "v_1_rest_medical_condition_search",
"table_name": "medical_condition_base",
"endpoint": {
"data_selector": "medicalConditions",
"path": "/v1/rest/medicalCondition/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single medical condition
{
"name": "v_1_rest_medical_condition",
"table_name": "medical_condition_full",
"endpoint": {
"data_selector": "medicalCondition",
"path": "/v1/rest/medicalCondition",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over movies
{
"name": "v1_rest_movie_search",
"table_name": "movie_base",
"endpoint": {
"data_selector": "movies",
"path": "/v1/rest/movie/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over occupations
{
"name": "v1_rest_occupation_search",
"table_name": "occupation_base",
"endpoint": {
"data_selector": "occupations",
"path": "/v1/rest/occupation/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over occupations (V2)
{
"name": "v2_rest_occupation_search",
"table_name": "occupation_v2_base",
"endpoint": {
"data_selector": "occupations",
"path": "/v2/rest/occupation/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over organizations
{
"name": "v1_rest_organization_search",
"table_name": "organization_base",
"endpoint": {
"data_selector": "organizations",
"path": "/v1/rest/organization/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single spacecraft class (V2)
{
"name": "v_2_rest_spacecraft_class",
"table_name": "organization_base",
"endpoint": {
"data_selector": "spacecraftClass.owners",
"path": "/v2/rest/spacecraftClass",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single spacecraft class (V3)
{
"name": "v_3_rest_spacecraft_class",
"table_name": "organization_base",
"endpoint": {
"data_selector": "spacecraftClass.owners",
"path": "/v3/rest/spacecraftClass",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single character
{
"name": "v1_rest_character",
"table_name": "performer_base",
"endpoint": {
"data_selector": "character.performers",
"path": "/v1/rest/character",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over performers
{
"name": "v1_rest_performer_search",
"table_name": "performer_base",
"endpoint": {
"data_selector": "performers",
"path": "/v1/rest/performer/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over performers (V2)
{
"name": "v2_rest_performer_search",
"table_name": "performer_v2_base",
"endpoint": {
"data_selector": "performers",
"path": "/v2/rest/performer/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single video release
{
"name": "v_1_rest_video_release",
"table_name": "reference",
"endpoint": {
"data_selector": "videoRelease.references",
"path": "/v1/rest/videoRelease",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over seasons
{
"name": "v1_rest_season_search",
"table_name": "season_base",
"endpoint": {
"data_selector": "seasons",
"path": "/v1/rest/season/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over series
{
"name": "v1_rest_series_search",
"table_name": "series_base",
"endpoint": {
"data_selector": "series",
"path": "/v1/rest/series/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single video release (V2)
{
"name": "v_2_rest_video_release",
"table_name": "series_base",
"endpoint": {
"data_selector": "videoRelease.series",
"path": "/v2/rest/videoRelease",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over soundtracks
{
"name": "v1_rest_soundtrack_search",
"table_name": "soundtrack_base",
"endpoint": {
"data_selector": "soundtracks",
"path": "/v1/rest/soundtrack/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over spacecrafts
{
"name": "v1_rest_spacecraft_search",
"table_name": "spacecraft_base",
"endpoint": {
"data_selector": "spacecrafts",
"path": "/v1/rest/spacecraft/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over spacecraft classes
{
"name": "v_1_rest_spacecraft_class_search",
"table_name": "spacecraft_class_base",
"endpoint": {
"data_selector": "spacecraftClasses",
"path": "/v1/rest/spacecraftClass/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over spacecraft classes (V2)
{
"name": "v_2_rest_spacecraft_class_search",
"table_name": "spacecraft_class_v2_base",
"endpoint": {
"data_selector": "spacecraftClasses",
"path": "/v2/rest/spacecraftClass/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single spacecraft
{
"name": "v1_rest_spacecraft",
"table_name": "spacecraft_type",
"endpoint": {
"data_selector": "spacecraft.spacecraftTypes",
"path": "/v1/rest/spacecraft",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single spacecraft (V2)
{
"name": "v2_rest_spacecraft",
"table_name": "spacecraft_type",
"endpoint": {
"data_selector": "spacecraft.spacecraftTypes",
"path": "/v2/rest/spacecraft",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single spacecraft class
{
"name": "v_1_rest_spacecraft_class",
"table_name": "spacecraft_type",
"endpoint": {
"data_selector": "spacecraftClass.spacecraftTypes",
"path": "/v1/rest/spacecraftClass",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over spacecrafts (V2)
{
"name": "v2_rest_spacecraft_search",
"table_name": "spacecraft_v2_base",
"endpoint": {
"data_selector": "spacecrafts",
"path": "/v2/rest/spacecraft/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over species
{
"name": "v1_rest_species_search",
"table_name": "species_base",
"endpoint": {
"data_selector": "species",
"path": "/v1/rest/species/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over species (V2)
{
"name": "v2_rest_species_search",
"table_name": "species_v2_base",
"endpoint": {
"data_selector": "species",
"path": "/v2/rest/species/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single episode
{
"name": "v1_rest_episode",
"table_name": "staff_base",
"endpoint": {
"data_selector": "episode.writers",
"path": "/v1/rest/episode",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Retrieval of a single movie
{
"name": "v1_rest_movie",
"table_name": "staff_base",
"endpoint": {
"data_selector": "movie.writers",
"path": "/v1/rest/movie",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over staff members
{
"name": "v1_rest_staff_search",
"table_name": "staff_base",
"endpoint": {
"data_selector": "staff",
"path": "/v1/rest/staff/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over staff members (V2)
{
"name": "v2_rest_staff_search",
"table_name": "staff_v2_base",
"endpoint": {
"data_selector": "staff",
"path": "/v2/rest/staff/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over technology pieces
{
"name": "v1_rest_technology_search",
"table_name": "technology_base",
"endpoint": {
"data_selector": "technology",
"path": "/v1/rest/technology/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single technology piece
{
"name": "v1_rest_technology",
"table_name": "technology_full",
"endpoint": {
"data_selector": "technology",
"path": "/v1/rest/technology",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over technology pieces (V2)
{
"name": "v2_rest_technology_search",
"table_name": "technology_v2_base",
"endpoint": {
"data_selector": "technology",
"path": "/v2/rest/technology/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single technology piece (V2)
{
"name": "v2_rest_technology",
"table_name": "technology_v2_full",
"endpoint": {
"data_selector": "technology",
"path": "/v2/rest/technology",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over titles
{
"name": "v1_rest_title_search",
"table_name": "title_base",
"endpoint": {
"data_selector": "titles",
"path": "/v1/rest/title/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over titles (V2)
{
"name": "v2_rest_title_search",
"table_name": "title_v2_base",
"endpoint": {
"data_selector": "titles",
"path": "/v2/rest/title/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over trading cards
{
"name": "v_1_rest_trading_card_search",
"table_name": "trading_card_base",
"endpoint": {
"data_selector": "tradingCards",
"path": "/v1/rest/tradingCard/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single trading card deck
{
"name": "v_1_rest_trading_card_deck",
"table_name": "trading_card_base",
"endpoint": {
"data_selector": "tradingCardDeck.tradingCards",
"path": "/v1/rest/tradingCardDeck",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over trading card decks
{
"name": "v_1_rest_trading_card_deck_search",
"table_name": "trading_card_deck_base",
"endpoint": {
"data_selector": "tradingCardDecks",
"path": "/v1/rest/tradingCardDeck/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single trading card
{
"name": "v_1_rest_trading_card",
"table_name": "trading_card_full",
"endpoint": {
"data_selector": "tradingCard",
"path": "/v1/rest/tradingCard",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over trading card sets
{
"name": "v_1_rest_trading_card_set_search",
"table_name": "trading_card_set_base",
"endpoint": {
"data_selector": "tradingCardSets",
"path": "/v1/rest/tradingCardSet/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over video games
{
"name": "v_1_rest_video_game_search",
"table_name": "video_game_base",
"endpoint": {
"data_selector": "videoGames",
"path": "/v1/rest/videoGame/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over video releases
{
"name": "v_1_rest_video_release_search",
"table_name": "video_release_base",
"endpoint": {
"data_selector": "videoReleases",
"path": "/v1/rest/videoRelease/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over video releases (V2)
{
"name": "v_2_rest_video_release_search",
"table_name": "video_release_base",
"endpoint": {
"data_selector": "videoReleases",
"path": "/v2/rest/videoRelease/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Pagination over weapons
{
"name": "v1_rest_weapon_search",
"table_name": "weapon_base",
"endpoint": {
"data_selector": "weapons",
"path": "/v1/rest/weapon/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single weapon
{
"name": "v1_rest_weapon",
"table_name": "weapon_full",
"endpoint": {
"data_selector": "weapon",
"path": "/v1/rest/weapon",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
# Pagination over weapons (V2)
{
"name": "v2_rest_weapon_search",
"table_name": "weapon_v2_base",
"endpoint": {
"data_selector": "weapons",
"path": "/v2/rest/weapon/search",
"params": {
# the parameters below can optionally be configured
# "pageNumber": "OPTIONAL_CONFIG",
# "pageSize": "OPTIONAL_CONFIG",

},
"paginator": "auto",
}
},
# Retrieval of a single weapon (V2)
{
"name": "v2_rest_weapon",
"table_name": "weapon_v2_full",
"endpoint": {
"data_selector": "weapon",
"path": "/v2/rest/weapon",
"params": {
"uid": "FILL_ME_IN", # TODO: fill in required query parameter

},
"paginator": "auto",
}
},
]
}

return rest_api_source(source_config)

2. Configuring your source and destination credentials

info

dlt-init-openapi will try to detect which authentication mechanism (if any) is used by the API in question and add a placeholder in your secrets.toml.

  • If you know your API needs authentication, but none was detected, you can learn more about adding authentication to the rest_api here.
  • OAuth detection currently is not supported, but you can supply your own authentication mechanism as outlined here.

The dlt cli will have created a .dlt directory in your project folder. This directory contains a config.toml file and a secrets.toml file that you can use to configure your pipeline. The automatically created version of these files look like this:

generated config.toml


[runtime]
log_level="INFO"

[sources.startrek]
# Base URL for the API
# STAPI over secure HTTPS protocol
base_url = "https://stapi.co/api"
# Alternative servers found in openapi spec:
# STAPI over plain HTTP protocol
# base_url = "http://stapi.co/api"

generated secrets.toml


[sources.startrek]
# secrets for your startrek source
# example_api_key = "example value"

2.1. Adjust the generated code to your usecase

Further help setting up your source and destinations

At this time, the dlt-init-openapi cli tool will always create pipelines that load to a local duckdb instance. Switching to a different destination is trivial, all you need to do is change the destination parameter in startrek_pipeline.py to redshift and supply the credentials as outlined in the destination doc linked below.

  • Read more about setting up the rest_api source in our docs.
  • Read more about setting up the Redshift destination in our docs.

3. Running your pipeline for the first time

The dlt cli has also created a main pipeline script for you at startrek_pipeline.py, as well as a folder startrek that contains additional python files for your source. These files are your local copies which you can modify to fit your needs. In some cases you may find that you only need to do small changes to your pipelines or add some configurations, in other cases these files can serve as a working starting point for your code, but will need to be adjusted to do what you need them to do.

The main pipeline script will look something like this:


import dlt

from startrek import startrek_source


if __name__ == "__main__":
pipeline = dlt.pipeline(
pipeline_name="startrek_pipeline",
destination='duckdb',
dataset_name="startrek_data",
progress="log",
export_schema_path="schemas/export"
)
source = startrek_source()
info = pipeline.run(source)
print(info)

Provided you have set up your credentials, you can run your pipeline like a regular python script with the following command:

python startrek_pipeline.py

4. Inspecting your load result

You can now inspect the state of your pipeline with the dlt cli:

dlt pipeline startrek_pipeline info

You can also use streamlit to inspect the contents of your Redshift destination for this:

# install streamlit
pip install streamlit
# run the streamlit app for your pipeline with the dlt cli:
dlt pipeline startrek_pipeline show

5. Next steps to get your pipeline running in production

One of the beauties of dlt is, that we are just a plain Python library, so you can run your pipeline in any environment that supports Python >= 3.8. We have a couple of helpers and guides in our docs to get you there:

The Deploy section will show you how to deploy your pipeline to

  • Deploy with GitHub Actions: Learn how to deploy your dlt pipeline using GitHub Actions, a CI/CD runner that you can use for free. Follow the guide here.
  • Deploy with Airflow and Google Composer: Discover how to deploy your dlt pipeline with Airflow and Google Composer, a managed Airflow environment provided by Google. Check out the instructions here.
  • Deploy with Google Cloud Functions: Explore the steps to deploy your dlt pipeline using Google Cloud Functions. Find the detailed guide here.
  • Other Deployment Methods: Browse additional methods for deploying your dlt pipeline, including various cloud services and environments. See the comprehensive list here.

The running in production section will teach you about:

  • How to Monitor your pipeline: Learn how to effectively monitor your dlt pipeline in production to ensure smooth operation and timely detection of issues. How to Monitor your pipeline
  • Set up alerts: Set up alerting mechanisms to get notified about critical events and errors in your dlt pipeline. Set up alerts
  • Set up tracing: Implement tracing in your dlt pipeline to gain insights into the execution flow and identify bottlenecks. And set up tracing

Available Sources and Resources

For this verified source the following sources and resources are available

Source Star Trek

Comprehensive Star Trek universe data including characters, locations, technology, and media.

Resource NameWrite DispositionDescription
magazine_baseappendBasic information about magazines
occupation_v2_baseappendVersion 2 of basic occupation data
food_fullappendDetailed information about food items
material_fullappendDetailed information about materials
book_v2_baseappendVersion 2 of basic book data
element_fullappendDetailed information about elements
performer_baseappendBasic information about performers
location_baseappendBasic information about locations
staff_v2_baseappendVersion 2 of basic staff data
technology_baseappendBasic information about technology
literature_fullappendDetailed information about literature
weapon_v2_baseappendVersion 2 of basic weapon data
staff_baseappendBasic information about staff
movie_baseappendBasic information about movies
title_baseappendBasic information about titles
spacecraft_v2_baseappendVersion 2 of basic spacecraft data
book_series_baseappendBasic information about book series
referenceappendReference data
spacecraft_baseappendBasic information about spacecraft
magazine_series_baseappendBasic information about magazine series
element_v2_baseappendVersion 2 of basic element data
season_baseappendBasic information about seasons
location_v2_baseappendVersion 2 of basic location data
company_baseappendBasic information about companies
trading_card_baseappendBasic information about trading cards
element_baseappendBasic information about elements
occupation_baseappendBasic information about occupations
technology_v2_baseappendVersion 2 of basic technology data
animal_fullappendDetailed information about animals
food_baseappendBasic information about food items
company_v2_baseappendVersion 2 of basic company data
medical_condition_fullappendDetailed information about medical conditions
video_game_baseappendBasic information about video games
weapon_baseappendBasic information about weapons
weapon_fullappendDetailed information about weapons
character_baseappendBasic information about characters
location_v2_fullappendDetailed version 2 information about locations
spacecraft_class_v2_baseappendVersion 2 of basic spacecraft class data
technology_fullappendDetailed information about technology
trading_card_set_baseappendBasic information about trading card sets
location_fullappendDetailed information about locations
species_v2_baseappendVersion 2 of basic species data
spacecraft_typeappendInformation about types of spacecraft
organization_baseappendBasic information about organizations
title_v2_baseappendVersion 2 of basic title data
species_baseappendBasic information about species
video_release_baseappendBasic information about video releases
element_v2_fullappendDetailed version 2 information about elements
book_collection_baseappendBasic information about book collections
trading_card_deck_baseappendBasic information about trading card decks
series_baseappendBasic information about series
trading_card_fullappendDetailed information about trading cards
soundtrack_baseappendBasic information about soundtracks
weapon_v2_fullappendDetailed version 2 information about weapons
episode_baseappendBasic information about episodes
data_versionappendInformation about data versions
conflict_baseappendBasic information about conflicts
technology_v2_fullappendDetailed version 2 information about technology
literature_baseappendBasic information about literature
astronomical_object_baseappendBasic information about astronomical objects
spacecraft_class_baseappendBasic information about spacecraft classes
comic_collection_baseappendBasic information about comic collections
animal_baseappendBasic information about animals
comic_strip_baseappendBasic information about comic strips
book_baseappendBasic information about books
comic_series_baseappendBasic information about comic series
comics_baseappendBasic information about comics
company_fullappendDetailed information about companies
material_baseappendBasic information about materials
company_v2_fullappendDetailed version 2 information about companies
medical_condition_baseappendBasic information about medical conditions
performer_v2_baseappendVersion 2 of basic performer data
astronomical_object_v2_baseappendVersion 2 of basic astronomical object data

Additional pipeline guides

This demo works on codespaces. Codespaces is a development environment available for free to anyone with a Github account. You'll be asked to fork the demo repository and from there the README guides you with further steps.
The demo uses the Continue VSCode extension.

Off to codespaces!

DHelp

Ask a question

Welcome to "Codex Central", your next-gen help center, driven by OpenAI's GPT-4 model. It's more than just a forum or a FAQ hub – it's a dynamic knowledge base where coders can find AI-assisted solutions to their pressing problems. With GPT-4's powerful comprehension and predictive abilities, Codex Central provides instantaneous issue resolution, insightful debugging, and personalized guidance. Get your code running smoothly with the unparalleled support at Codex Central - coding help reimagined with AI prowess.