> ## Documentation Index
> Fetch the complete documentation index at: https://docs.startree.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Getting Started: Query Parquet Without a Catalog

> Query raw Parquet files on S3 or GCS as a StarTree External Table with no Iceberg table, Glue database, or catalog service in front of them.

**Yes — if your Parquet files just sit under a bucket prefix with nothing else in front of them, StarTree can query them directly as an External Table.** No Iceberg metadata, no Glue database, no catalog REST endpoint, no separate registration step. Point StarTree at the bucket and prefix and it discovers the files itself.

## When this is the right fit

* You have a data pipeline (Spark, Flink, a batch job) that lands Parquet files in S3 or GCS, with no catalog layer on top.
* You want to try External Tables against a sample dataset before setting up a full Iceberg catalog.
* Your data lake uses a catalog for *other* consumers, but you'd rather point StarTree straight at the underlying files.

If your data is already registered in a catalog — AWS Glue, Amazon S3 Tables, Databricks/OSS Unity Catalog, or Nessie — skip ahead to [Connect a Catalog](./connect-a-catalog) instead; StarTree can use the catalog's schema and file-listing directly rather than re-discovering it from raw files.

## Two sources, same shape

Both scan a bucket prefix, infer a schema by sampling the Parquet files, and sync on a schedule — the only difference is which object store and credential type you use.

| Source            | Object store                                                  | Credentials                                                | Onboarding guide                                                                                    |
| ----------------- | ------------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| **S3 Data Lake**  | Amazon S3                                                     | Assumed IAM role, cluster node role, or static access keys | [S3: Onboarding via API](../s3/onboarding-api) · [via Data Portal](../s3/onboarding-data-portal)    |
| **GCS Data Lake** | Google Cloud Storage (via its S3-compatible interop endpoint) | HMAC keys (inline or via GCP Secret Manager)               | [GCS: Onboarding via API](../gcs/onboarding-api) · [via Data Portal](../gcs/onboarding-data-portal) |

Prefer the REST API for automation and scripting multiple tables; use the Data Portal wizard for a one-off table with no JSON to write.

<Tip>
  Also see the [SQL DDL](../sql-ddl) shortcut — `CREATE TABLE ... WITH (type = 's3', ...)` creates the same table in one statement instead of the 4-step REST flow.
</Tip>

## What's next

Once the table is created, add [indexes](../indexes) for the columns you filter and group by, enable [caching](../data-and-index-caching) so repeat queries don't re-fetch from object storage, and track sync health through [Observability](../observability).
