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

# Artifact Pool

> Query files that a Workspace has published as SQL tables.

The Artifact Pool contains uploaded files that have been published as queryable
tables. It is flat: the publication's table name follows the `artifacts`
catalog directly.

```text theme={null}
artifacts.{table}
```

For example:

```sql theme={null}
SELECT *
FROM artifacts.headcount
LIMIT 10
```

## Publish a table

An artifact becomes queryable after the Workspace:

1. Uploads the file with `artifacts.uploadArtifact`.
2. Infers or defines its schema with `artifacts.runArtifactSchemaInference`.
3. Publishes it as a table with `artifacts.publishArtifact`.

See the [Workspace HTTP reference](/protocols/http/workspace) for the exact
requests and generated SDK examples.

### Upload limits

Each uploaded file can be up to 1 GB. Accepted formats are `.csv`, `.xlsx`,
`.xls`, `.numbers`, `.ods`, and `.zip`. The app checks the size before the
request starts, and the API rejects a larger body with HTTP 413. A single
upload may run for up to 10 minutes, so a 1 GB file needs a connection of
roughly 15 Mbps or better to finish in time.

The same 1 GB cap is enforced at every hop: the `Artifact.File` scalar's
upload configuration, the `uploadArtifact` operation's request body limit,
the browser proxy in the web app, and the load balancer's backend timeout.
Change them together.

The publication's table name becomes `{table}`. Folders used to organize files
in the app do not appear in SQL addresses.

Published artifacts join any other pool through ordinary SQL. For example, a
published headcount plan can join Provider directory data on a compatible email
column:

```sql theme={null}
SELECT
  plan.email,
  plan.target_department,
  directory.orgunitpath,
  directory.isadmin
FROM artifacts.headcount AS plan
LEFT JOIN providers.google.users AS directory
  ON directory.primaryemail = plan.email
```

Use [catalog discovery](/protocols/sql/data-catalog/discover-tables-and-columns)
to inspect the published schema rather than inferring it from the source file.
