[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-anthropic-redshift-api":3,"mdc--f3ycto-key":33,"related-org-anthropic-redshift-api":3081,"related-repo-anthropic-redshift-api":3270},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":31,"mdContent":32},"redshift-api","query Amazon Redshift databases","Run SQL against Amazon Redshift — submit statements, poll status, page through results, and browse databases\u002Fschemas\u002Ftables. Use this whenever the user wants to query Redshift (provisioned cluster or Serverless), ask \"what tables are in this schema\", check a query's status, or mentions `redshift-data`, a Redshift cluster identifier \u002F workgroup name, or a `redshift-data.{region}.amazonaws.com` endpoint. Always start from this skill when interacting with this service — its bundled scripts and recipes are the fastest path.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"anthropic","Anthropic","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fanthropic.png","anthropics",[13,17,20],{"name":14,"slug":15,"type":16},"Data Analysis","data-analysis","tag",{"name":18,"slug":19,"type":16},"Database","database",{"name":21,"slug":22,"type":16},"SQL","sql",30,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-tag-plugins","2026-06-24T07:46:39.216801",null,12,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":26},[],"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-tag-plugins\u002Ftree\u002FHEAD\u002Fredshift\u002Fskills\u002Fredshift-api","---\nname: redshift-api\ndescription: Run SQL against Amazon Redshift — submit statements, poll status, page through results, and browse databases\u002Fschemas\u002Ftables. Use this whenever the user wants to query Redshift (provisioned cluster or Serverless), ask \"what tables are in this schema\", check a query's status, or mentions `redshift-data`, a Redshift cluster identifier \u002F workgroup name, or a `redshift-data.{region}.amazonaws.com` endpoint. Always start from this skill when interacting with this service — its bundled scripts and recipes are the fastest path.\n---\n\nIn the Amazon Redshift Data API, every call is a `POST` to `https:\u002F\u002Fredshift-data.\u003Cregion>.amazonaws.com\u002F` with\n`Content-Type: application\u002Fx-amz-json-1.1` and `X-Amz-Target: RedshiftData.\u003CAction>` — there are no\nREST-style paths. The API is fully asynchronous: submit a statement, get back an `Id`, poll\n`DescribeStatement` until done, then page results with `GetStatementResult` —\n`scripts\u002Frs_query.sh` (operation 1) drives that loop for you. The same calls work against\nprovisioned clusters and Serverless; only the connection-target field differs.\n\n## Request setup\n\nAuthentication is handled by the runtime — requests to this API are signed with credentials\nconfigured for the workspace, so there is nothing to set up. Do not try to obtain AWS keys or sign\nrequests yourself. A persistent `AccessDeniedException` means the credential isn't configured for\nthis workspace — report that instead of debugging auth.\n\nTwo pieces of configuration are real and required:\n\n**1. Region** — it's part of the endpoint hostname:\n\n```bash\nexport AWS_DEFAULT_REGION=\"us-east-1\"        # the region your cluster \u002F workgroup is in\n```\n\n**2. Connection target** — which cluster\u002Fworkgroup and database the Data API connects to. Pick one\nand put the matching JSON fields in `RS_TARGET`; the recipes below merge it into each request body:\n\n- **Serverless** — pass `WorkgroupName`. The configured identity is mapped to a database user.\n  Simplest.\n- **Provisioned, temporary credentials** — pass `ClusterIdentifier` and `DbUser`. The Data API\n  resolves database credentials under the hood.\n- **Provisioned or Serverless, Secrets Manager** — pass `SecretArn` pointing to a secret that holds\n  the database login.\n\nSet whichever applies once:\n\n```bash\nexport RS_DATABASE=\"dev\"\n# Serverless:\nexport RS_TARGET='{\"WorkgroupName\": \"my-workgroup\"}'\n# — or provisioned + temp creds:\n# export RS_TARGET='{\"ClusterIdentifier\": \"my-cluster\", \"DbUser\": \"my_user\"}'\n# — or either + Secrets Manager:\n# export RS_TARGET='{\"ClusterIdentifier\": \"my-cluster\", \"SecretArn\": \"arn:aws:secretsmanager:us-east-1:123456789012:secret:rs-creds-AbCdEf\"}'\n```\n\n**The helper used below.** One function wraps the endpoint, the headers, and the action name. The\n`Authorization` header is a placeholder — the runtime replaces it with a real signature.\n\n```bash\nrsapi() {\n  local action=\"$1\"\n  curl -sS \"https:\u002F\u002Fredshift-data.${AWS_DEFAULT_REGION}.amazonaws.com\u002F\" \\\n    -H \"Content-Type: application\u002Fx-amz-json-1.1\" \\\n    -H \"X-Amz-Target: RedshiftData.${action}\" \\\n    -H \"Authorization: placeholder\" \\\n    -d \"${2:?rsapi needs a JSON body as the second argument}\"\n}\n```\n\n**Sanity check** — list databases. A `200` with a `Databases` array confirms the workspace is wired\nup and the connection target is right. An error names which layer failed.\n\n```bash\nrsapi ListDatabases \"$(jq -n --argjson t \"$RS_TARGET\" --arg db \"$RS_DATABASE\" \\\n  '$t + {Database: $db}')\" | jq .\n```\n\n## Core operations\n\nEvery action that connects to the database takes the same merged target body —\n`$t + {Database: $db, ...}`. Errors come back as `{\"__type\": \"\u003CException>\", \"message\": \"...\"}`\ninstead of the expected shape; on any call, an absent top-level field (`Id`, `Status`, `Records`, …)\nmeans you got the error envelope — print it and stop.\n\n### 1. Run a query (`scripts\u002Frs_query.sh`)\n\nRun SQL through the bundled script (path is relative to this skill's directory): it submits with\n`ExecuteStatement`, polls `DescribeStatement` to a terminal state, pages `GetStatementResult` on\n`NextToken`, and decodes the typed one-key cell objects.\n\n```bash\nscripts\u002Frs_query.sh \\\n  'SELECT event_name, COUNT(*) AS n FROM public.events\n   WHERE event_date >= :start GROUP BY 1 ORDER BY 2 DESC LIMIT 20' \\\n  --param start=2024-01-01 --name top-events\n```\n\n- SQL is one argument (or stdin). Instance specifics come from `AWS_DEFAULT_REGION` \u002F `RS_TARGET` \u002F\n  `RS_DATABASE` above; `--database` overrides the database.\n- `--param NAME=VALUE` (repeatable) binds `:NAME` placeholders — values are always strings; the\n  database casts them. `--name` sets `StatementName` so the query shows up in `ListStatements`.\n- `--max-rows N` caps fetched rows (default 10000, `0` = everything); `--json` emits one JSON object\n  per row instead of TSV with a header. Statement id, status, duration, and row counts go to stderr.\n- Exit codes: `0` success, `1` submit failed or SQL `FAILED`\u002F`ABORTED` (the API's own message on\n  stderr), `2` gave up waiting after `--max-wait` seconds (default 600) — the statement id is on\n  stderr; resume it with operation 2.\n\nIf the script errors, read it — it's plain `curl` + `jq` — and debug against `references\u002Fapi.md`.\nFor `BatchExecuteStatement` and sub-statement results, session reuse (`SessionKeepAliveSeconds` \u002F\n`SessionId`), `ResultFormat: CSV`, cancelling, or catalog browsing, use the actions below.\n\n### 2. Resume a statement by id (`DescribeStatement` → `GetStatementResult`)\n\nWhen the script exits 2 (timeout) or you have a statement id from elsewhere, poll and fetch\ndirectly:\n\n```bash\nrsapi DescribeStatement \"$(jq -n --arg id \"$ID\" '{Id: $id}')\" \\\n  | jq '{Status, Duration, ResultRows, HasResultSet, Error}'\nrsapi GetStatementResult \"$(jq -n --arg id \"$ID\" '{Id: $id}')\" \\\n  | jq -r '.Records[]? | [.[] | if .isNull then null else to_entries[0].value end] | @tsv'\n```\n\n- `Status` ∈ `SUBMITTED`, `PICKED`, `STARTED`, `FINISHED`, `FAILED`, `ABORTED`. Only `FINISHED`\n  with `HasResultSet: true` has rows; `FAILED` carries the SQL error in `.Error`. `Duration` is\n  **nanoseconds**.\n- Result cells are typed one-key objects (see the gotcha under Error handling); column names\u002Ftypes\n  are in `.ColumnMetadata` on the first page. Further pages follow `NextToken` — no page-size knob;\n  `DescribeStatement.ResultRows` is the total up front.\n\n### 3. Cancel a running statement (`CancelStatement`)\n\n```bash\nrsapi CancelStatement \"$(jq -n --arg id \"$ID\" '{Id: $id}')\" | jq .\n# {\"Status\": true} on success — best-effort, check DescribeStatement to confirm.\n```\n\n### 4. Run multiple statements in one call (`BatchExecuteStatement`)\n\nAll statements run in one transaction — all commit or all roll back.\n\n```bash\nrsapi BatchExecuteStatement \"$(jq -n --argjson t \"$RS_TARGET\" --arg db \"$RS_DATABASE\" '$t + {\n    Database: $db,\n    Sqls: [\"CREATE TEMP TABLE tmp AS SELECT 1 AS x\", \"SELECT * FROM tmp\"]\n  }')\" | jq '{Id}'\n```\n\n`DescribeStatement` on the parent `Id` returns a `SubStatements[]` array. Each sub-statement has its\nown `Id` (the parent ID with a `:1`, `:2`, … suffix), `Status`, and `HasResultSet` — fetch each\nsub-statement's results with its own `GetStatementResult` call.\n\n### 5. List recent statements (`ListStatements`)\n\n```bash\nrsapi ListStatements '{\"MaxResults\": 20, \"Status\": \"ALL\"}' \\\n  | jq '.Statements[] | {Id, StatementName, Status, QueryString: (.QueryString[0:80]), CreatedAt}'\n```\n\n`Status` filter: `SUBMITTED`, `PICKED`, `STARTED`, `FINISHED`, `FAILED`, `ABORTED`, `ALL` — **only\nfinished statements are listed if you omit it**. `MaxResults` 0–100. `RoleLevel` defaults to `true`\n(includes statements from anyone assuming the same IAM role); set `false` to see only this session's.\n\n### 6. Browse the catalog (`ListDatabases` \u002F `ListSchemas` \u002F `ListTables` \u002F `DescribeTable`)\n\nAll four take the merged target body. Patterns use SQL `LIKE` wildcards (`%`, `_`).\n\n- **`ListDatabases`** — `Databases[]` (strings)\n- **`ListSchemas`** — `SchemaPattern` (optional) — `Schemas[]` (strings)\n- **`ListTables`** — `SchemaPattern`, `TablePattern` — `Tables[] {schema, name, type}` — `type` ∈ `TABLE`\u002F`VIEW`\u002F`SYSTEM TABLE`\u002F`GLOBAL TEMPORARY`\u002F`LOCAL TEMPORARY`\u002F`ALIAS`\u002F`SYNONYM`\n- **`DescribeTable`** — `Schema`, `Table` — `ColumnList[] {name, typeName, nullable, length, precision}`\n\n```bash\nrsapi ListTables \"$(jq -n --argjson t \"$RS_TARGET\" --arg db \"$RS_DATABASE\" \\\n  '$t + {Database: $db, SchemaPattern: \"public\", TablePattern: \"ev%\"}')\" | jq '.Tables'\n```\n\nJSON field names are PascalCase (`WorkgroupName`, not `workgroup-name`). All four are paginated\n(`NextToken`). See `references\u002Fapi.md` for every action's body shape.\n\n## Pagination\n\n`GetStatementResult`, `ListStatements`, `ListDatabases`, `ListSchemas`, `ListTables`, and\n`DescribeTable` all use the same scheme: the response carries `NextToken` when there's more; pass it\nback as `NextToken` in the next request body. Stop when it's absent.\n\n## Rate limits\n\n- **Active statements** — up to 500 active (`SUBMITTED`\u002F`STARTED`) per cluster or workgroup. Excess\n  submits fail with `ActiveStatementsExceededException`.\n- **Result size** — 500 MB per statement (after gzip) and 64 KB per row. Larger results fail; add a\n  `LIMIT` or use `UNLOAD ... TO 's3:\u002F\u002F...'`.\n- **Result retention** — 24 hours; after that `GetStatementResult` returns\n  `ResourceNotFoundException`.\n- **Statement duration** — 24 hours max. **Query string** — 100 KB max.\n- **API rate** — fixed, non-adjustable TPS quotas per account\u002Fregion: `DescribeStatement` 100,\n  `ExecuteStatement` 30, `GetStatementResult` 20, `BatchExecuteStatement` 20, and only **3 TPS** for\n  `CancelStatement`, `ListStatements`, `ListDatabases`, `ListSchemas`, `ListTables`, `DescribeTable`.\n  Exceeding one returns `ThrottlingException` (HTTP 400) — back off and don't poll in a hot loop.\n\n## Error handling\n\nErrors return as `{\"__type\": \"\u003CException>\", \"message\": \"...\"}` (HTTP 400\u002F403\u002F500). The `__type`\nfield is the discriminator.\n\n- **`ValidationException` (400)** — Bad parameters. Common: passing both `ClusterIdentifier` and `WorkgroupName`, or neither; missing `Database`; wrong field casing.\n- **`ActiveStatementsExceededException` (400)** — Too many in flight. `ListStatements` `{\"Status\":\"STARTED\"}` shows what's running.\n- **`ActiveSessionsExceededException` (400)** — >500 open sessions. Stop passing `SessionKeepAliveSeconds` or wait for idle ones to expire.\n- **`ExecuteStatementException` (500)** — Submission failed before the DB saw it — wrong cluster\u002Fworkgroup name, unreachable cluster, bad `DbUser`. Check `RS_TARGET`.\n- **`ResourceNotFoundException` (400)** — Statement ID unknown or > 24 h old.\n- **`BatchExecuteStatementException` (500)** — One statement in the batch failed; whole transaction rolled back. Check `SubStatements[].Error`.\n- **`DatabaseConnectionException` \u002F `QueryTimeoutException`** — A catalog call couldn't reach the database or timed out. Check the target is up; retry.\n- **`AccessDeniedException` (403)** — Credential needs `redshift-data:*` on the cluster\u002Fworkgroup ARN plus, depending on connection mode, `redshift:GetClusterCredentials` \u002F `redshift-serverless:GetCredentials` \u002F `secretsmanager:GetSecretValue`. Report which is missing.\n- **`InternalServerException` (500)** — `ExecuteStatement` is **not idempotent** unless you pass a `ClientToken` — check `ListStatements` before retrying a write.\n- **`Status: FAILED` on `DescribeStatement`** — SQL failed after submission. Read `.Error` for the SQL message.\n\nTwo gotchas:\n\n- **`ExecuteStatement` returning 200 ≠ the query succeeded.** SQL errors only surface later as\n  `Status: FAILED` on `DescribeStatement`. Always poll before fetching results.\n- **Cell values are typed one-key objects**, not bare values. `longValue` is a JSON number,\n  `isNull: true` is a distinct shape. A naive `.value` read returns nothing, and chaining jq `\u002F\u002F`\n  across the typed keys breaks on `false`\u002F`0`. Use `to_entries[0].value`.\n\n## Going deeper\n\n`references\u002Fapi.md` has the complete catalog — every action's request\u002Fresponse shape in PascalCase\nfor raw HTTP, the `SqlParameter` binding format, the `ColumnMetadata` fields, `SubStatementData` for\nbatches, session reuse (`SessionKeepAliveSeconds` \u002F `SessionId`), and the quota table. Read it when\nyou need an action not covered above or the exact raw-HTTP body shape.\n",{"data":34,"body":35},{"name":4,"description":6},{"type":36,"children":37},"root",[38,111,118,131,136,147,203,221,285,290,404,422,697,723,825,831,874,888,923,992,1152,1211,1230,1235,1404,1530,1543,1618,1630,1635,1752,1821,1833,1893,1985,2019,2047,2216,2316,2350,2356,2411,2417,2606,2612,2632,2924,2929,3022,3028,3075],{"type":39,"tag":40,"props":41,"children":42},"element","p",{},[43,46,53,55,61,63,69,71,77,79,85,87,93,95,101,103,109],{"type":44,"value":45},"text","In the Amazon Redshift Data API, every call is a ",{"type":39,"tag":47,"props":48,"children":50},"code",{"className":49},[],[51],{"type":44,"value":52},"POST",{"type":44,"value":54}," to ",{"type":39,"tag":47,"props":56,"children":58},{"className":57},[],[59],{"type":44,"value":60},"https:\u002F\u002Fredshift-data.\u003Cregion>.amazonaws.com\u002F",{"type":44,"value":62}," with\n",{"type":39,"tag":47,"props":64,"children":66},{"className":65},[],[67],{"type":44,"value":68},"Content-Type: application\u002Fx-amz-json-1.1",{"type":44,"value":70}," and ",{"type":39,"tag":47,"props":72,"children":74},{"className":73},[],[75],{"type":44,"value":76},"X-Amz-Target: RedshiftData.\u003CAction>",{"type":44,"value":78}," — there are no\nREST-style paths. The API is fully asynchronous: submit a statement, get back an ",{"type":39,"tag":47,"props":80,"children":82},{"className":81},[],[83],{"type":44,"value":84},"Id",{"type":44,"value":86},", poll\n",{"type":39,"tag":47,"props":88,"children":90},{"className":89},[],[91],{"type":44,"value":92},"DescribeStatement",{"type":44,"value":94}," until done, then page results with ",{"type":39,"tag":47,"props":96,"children":98},{"className":97},[],[99],{"type":44,"value":100},"GetStatementResult",{"type":44,"value":102}," —\n",{"type":39,"tag":47,"props":104,"children":106},{"className":105},[],[107],{"type":44,"value":108},"scripts\u002Frs_query.sh",{"type":44,"value":110}," (operation 1) drives that loop for you. The same calls work against\nprovisioned clusters and Serverless; only the connection-target field differs.",{"type":39,"tag":112,"props":113,"children":115},"h2",{"id":114},"request-setup",[116],{"type":44,"value":117},"Request setup",{"type":39,"tag":40,"props":119,"children":120},{},[121,123,129],{"type":44,"value":122},"Authentication is handled by the runtime — requests to this API are signed with credentials\nconfigured for the workspace, so there is nothing to set up. Do not try to obtain AWS keys or sign\nrequests yourself. A persistent ",{"type":39,"tag":47,"props":124,"children":126},{"className":125},[],[127],{"type":44,"value":128},"AccessDeniedException",{"type":44,"value":130}," means the credential isn't configured for\nthis workspace — report that instead of debugging auth.",{"type":39,"tag":40,"props":132,"children":133},{},[134],{"type":44,"value":135},"Two pieces of configuration are real and required:",{"type":39,"tag":40,"props":137,"children":138},{},[139,145],{"type":39,"tag":140,"props":141,"children":142},"strong",{},[143],{"type":44,"value":144},"1. Region",{"type":44,"value":146}," — it's part of the endpoint hostname:",{"type":39,"tag":148,"props":149,"children":154},"pre",{"className":150,"code":151,"language":152,"meta":153,"style":153},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export AWS_DEFAULT_REGION=\"us-east-1\"        # the region your cluster \u002F workgroup is in\n","bash","",[155],{"type":39,"tag":47,"props":156,"children":157},{"__ignoreMap":153},[158],{"type":39,"tag":159,"props":160,"children":163},"span",{"class":161,"line":162},"line",1,[164,170,176,182,187,193,197],{"type":39,"tag":159,"props":165,"children":167},{"style":166},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[168],{"type":44,"value":169},"export",{"type":39,"tag":159,"props":171,"children":173},{"style":172},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[174],{"type":44,"value":175}," AWS_DEFAULT_REGION",{"type":39,"tag":159,"props":177,"children":179},{"style":178},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[180],{"type":44,"value":181},"=",{"type":39,"tag":159,"props":183,"children":184},{"style":178},[185],{"type":44,"value":186},"\"",{"type":39,"tag":159,"props":188,"children":190},{"style":189},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[191],{"type":44,"value":192},"us-east-1",{"type":39,"tag":159,"props":194,"children":195},{"style":178},[196],{"type":44,"value":186},{"type":39,"tag":159,"props":198,"children":200},{"style":199},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[201],{"type":44,"value":202},"        # the region your cluster \u002F workgroup is in\n",{"type":39,"tag":40,"props":204,"children":205},{},[206,211,213,219],{"type":39,"tag":140,"props":207,"children":208},{},[209],{"type":44,"value":210},"2. Connection target",{"type":44,"value":212}," — which cluster\u002Fworkgroup and database the Data API connects to. Pick one\nand put the matching JSON fields in ",{"type":39,"tag":47,"props":214,"children":216},{"className":215},[],[217],{"type":44,"value":218},"RS_TARGET",{"type":44,"value":220},"; the recipes below merge it into each request body:",{"type":39,"tag":222,"props":223,"children":224},"ul",{},[225,244,268],{"type":39,"tag":226,"props":227,"children":228},"li",{},[229,234,236,242],{"type":39,"tag":140,"props":230,"children":231},{},[232],{"type":44,"value":233},"Serverless",{"type":44,"value":235}," — pass ",{"type":39,"tag":47,"props":237,"children":239},{"className":238},[],[240],{"type":44,"value":241},"WorkgroupName",{"type":44,"value":243},". The configured identity is mapped to a database user.\nSimplest.",{"type":39,"tag":226,"props":245,"children":246},{},[247,252,253,259,260,266],{"type":39,"tag":140,"props":248,"children":249},{},[250],{"type":44,"value":251},"Provisioned, temporary credentials",{"type":44,"value":235},{"type":39,"tag":47,"props":254,"children":256},{"className":255},[],[257],{"type":44,"value":258},"ClusterIdentifier",{"type":44,"value":70},{"type":39,"tag":47,"props":261,"children":263},{"className":262},[],[264],{"type":44,"value":265},"DbUser",{"type":44,"value":267},". The Data API\nresolves database credentials under the hood.",{"type":39,"tag":226,"props":269,"children":270},{},[271,276,277,283],{"type":39,"tag":140,"props":272,"children":273},{},[274],{"type":44,"value":275},"Provisioned or Serverless, Secrets Manager",{"type":44,"value":235},{"type":39,"tag":47,"props":278,"children":280},{"className":279},[],[281],{"type":44,"value":282},"SecretArn",{"type":44,"value":284}," pointing to a secret that holds\nthe database login.",{"type":39,"tag":40,"props":286,"children":287},{},[288],{"type":44,"value":289},"Set whichever applies once:",{"type":39,"tag":148,"props":291,"children":293},{"className":150,"code":292,"language":152,"meta":153,"style":153},"export RS_DATABASE=\"dev\"\n# Serverless:\nexport RS_TARGET='{\"WorkgroupName\": \"my-workgroup\"}'\n# — or provisioned + temp creds:\n# export RS_TARGET='{\"ClusterIdentifier\": \"my-cluster\", \"DbUser\": \"my_user\"}'\n# — or either + Secrets Manager:\n# export RS_TARGET='{\"ClusterIdentifier\": \"my-cluster\", \"SecretArn\": \"arn:aws:secretsmanager:us-east-1:123456789012:secret:rs-creds-AbCdEf\"}'\n",[294],{"type":39,"tag":47,"props":295,"children":296},{"__ignoreMap":153},[297,327,336,368,377,386,395],{"type":39,"tag":159,"props":298,"children":299},{"class":161,"line":162},[300,304,309,313,317,322],{"type":39,"tag":159,"props":301,"children":302},{"style":166},[303],{"type":44,"value":169},{"type":39,"tag":159,"props":305,"children":306},{"style":172},[307],{"type":44,"value":308}," RS_DATABASE",{"type":39,"tag":159,"props":310,"children":311},{"style":178},[312],{"type":44,"value":181},{"type":39,"tag":159,"props":314,"children":315},{"style":178},[316],{"type":44,"value":186},{"type":39,"tag":159,"props":318,"children":319},{"style":189},[320],{"type":44,"value":321},"dev",{"type":39,"tag":159,"props":323,"children":324},{"style":178},[325],{"type":44,"value":326},"\"\n",{"type":39,"tag":159,"props":328,"children":330},{"class":161,"line":329},2,[331],{"type":39,"tag":159,"props":332,"children":333},{"style":199},[334],{"type":44,"value":335},"# Serverless:\n",{"type":39,"tag":159,"props":337,"children":339},{"class":161,"line":338},3,[340,344,349,353,358,363],{"type":39,"tag":159,"props":341,"children":342},{"style":166},[343],{"type":44,"value":169},{"type":39,"tag":159,"props":345,"children":346},{"style":172},[347],{"type":44,"value":348}," RS_TARGET",{"type":39,"tag":159,"props":350,"children":351},{"style":178},[352],{"type":44,"value":181},{"type":39,"tag":159,"props":354,"children":355},{"style":178},[356],{"type":44,"value":357},"'",{"type":39,"tag":159,"props":359,"children":360},{"style":189},[361],{"type":44,"value":362},"{\"WorkgroupName\": \"my-workgroup\"}",{"type":39,"tag":159,"props":364,"children":365},{"style":178},[366],{"type":44,"value":367},"'\n",{"type":39,"tag":159,"props":369,"children":371},{"class":161,"line":370},4,[372],{"type":39,"tag":159,"props":373,"children":374},{"style":199},[375],{"type":44,"value":376},"# — or provisioned + temp creds:\n",{"type":39,"tag":159,"props":378,"children":380},{"class":161,"line":379},5,[381],{"type":39,"tag":159,"props":382,"children":383},{"style":199},[384],{"type":44,"value":385},"# export RS_TARGET='{\"ClusterIdentifier\": \"my-cluster\", \"DbUser\": \"my_user\"}'\n",{"type":39,"tag":159,"props":387,"children":389},{"class":161,"line":388},6,[390],{"type":39,"tag":159,"props":391,"children":392},{"style":199},[393],{"type":44,"value":394},"# — or either + Secrets Manager:\n",{"type":39,"tag":159,"props":396,"children":398},{"class":161,"line":397},7,[399],{"type":39,"tag":159,"props":400,"children":401},{"style":199},[402],{"type":44,"value":403},"# export RS_TARGET='{\"ClusterIdentifier\": \"my-cluster\", \"SecretArn\": \"arn:aws:secretsmanager:us-east-1:123456789012:secret:rs-creds-AbCdEf\"}'\n",{"type":39,"tag":40,"props":405,"children":406},{},[407,412,414,420],{"type":39,"tag":140,"props":408,"children":409},{},[410],{"type":44,"value":411},"The helper used below.",{"type":44,"value":413}," One function wraps the endpoint, the headers, and the action name. The\n",{"type":39,"tag":47,"props":415,"children":417},{"className":416},[],[418],{"type":44,"value":419},"Authorization",{"type":44,"value":421}," header is a placeholder — the runtime replaces it with a real signature.",{"type":39,"tag":148,"props":423,"children":425},{"className":150,"code":424,"language":152,"meta":153,"style":153},"rsapi() {\n  local action=\"$1\"\n  curl -sS \"https:\u002F\u002Fredshift-data.${AWS_DEFAULT_REGION}.amazonaws.com\u002F\" \\\n    -H \"Content-Type: application\u002Fx-amz-json-1.1\" \\\n    -H \"X-Amz-Target: RedshiftData.${action}\" \\\n    -H \"Authorization: placeholder\" \\\n    -d \"${2:?rsapi needs a JSON body as the second argument}\"\n}\n",[426],{"type":39,"tag":47,"props":427,"children":428},{"__ignoreMap":153},[429,448,479,532,556,590,614,688],{"type":39,"tag":159,"props":430,"children":431},{"class":161,"line":162},[432,438,443],{"type":39,"tag":159,"props":433,"children":435},{"style":434},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[436],{"type":44,"value":437},"rsapi",{"type":39,"tag":159,"props":439,"children":440},{"style":178},[441],{"type":44,"value":442},"()",{"type":39,"tag":159,"props":444,"children":445},{"style":178},[446],{"type":44,"value":447}," {\n",{"type":39,"tag":159,"props":449,"children":450},{"class":161,"line":329},[451,456,461,465,469,475],{"type":39,"tag":159,"props":452,"children":453},{"style":166},[454],{"type":44,"value":455},"  local",{"type":39,"tag":159,"props":457,"children":458},{"style":172},[459],{"type":44,"value":460}," action",{"type":39,"tag":159,"props":462,"children":463},{"style":178},[464],{"type":44,"value":181},{"type":39,"tag":159,"props":466,"children":467},{"style":178},[468],{"type":44,"value":186},{"type":39,"tag":159,"props":470,"children":472},{"style":471},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[473],{"type":44,"value":474},"$1",{"type":39,"tag":159,"props":476,"children":477},{"style":178},[478],{"type":44,"value":326},{"type":39,"tag":159,"props":480,"children":481},{"class":161,"line":338},[482,488,493,498,503,508,513,518,523,527],{"type":39,"tag":159,"props":483,"children":485},{"style":484},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[486],{"type":44,"value":487},"  curl",{"type":39,"tag":159,"props":489,"children":490},{"style":189},[491],{"type":44,"value":492}," -sS",{"type":39,"tag":159,"props":494,"children":495},{"style":178},[496],{"type":44,"value":497}," \"",{"type":39,"tag":159,"props":499,"children":500},{"style":189},[501],{"type":44,"value":502},"https:\u002F\u002Fredshift-data.",{"type":39,"tag":159,"props":504,"children":505},{"style":178},[506],{"type":44,"value":507},"${",{"type":39,"tag":159,"props":509,"children":510},{"style":172},[511],{"type":44,"value":512},"AWS_DEFAULT_REGION",{"type":39,"tag":159,"props":514,"children":515},{"style":178},[516],{"type":44,"value":517},"}",{"type":39,"tag":159,"props":519,"children":520},{"style":189},[521],{"type":44,"value":522},".amazonaws.com\u002F",{"type":39,"tag":159,"props":524,"children":525},{"style":178},[526],{"type":44,"value":186},{"type":39,"tag":159,"props":528,"children":529},{"style":172},[530],{"type":44,"value":531}," \\\n",{"type":39,"tag":159,"props":533,"children":534},{"class":161,"line":370},[535,540,544,548,552],{"type":39,"tag":159,"props":536,"children":537},{"style":189},[538],{"type":44,"value":539},"    -H",{"type":39,"tag":159,"props":541,"children":542},{"style":178},[543],{"type":44,"value":497},{"type":39,"tag":159,"props":545,"children":546},{"style":189},[547],{"type":44,"value":68},{"type":39,"tag":159,"props":549,"children":550},{"style":178},[551],{"type":44,"value":186},{"type":39,"tag":159,"props":553,"children":554},{"style":172},[555],{"type":44,"value":531},{"type":39,"tag":159,"props":557,"children":558},{"class":161,"line":379},[559,563,567,572,576,581,586],{"type":39,"tag":159,"props":560,"children":561},{"style":189},[562],{"type":44,"value":539},{"type":39,"tag":159,"props":564,"children":565},{"style":178},[566],{"type":44,"value":497},{"type":39,"tag":159,"props":568,"children":569},{"style":189},[570],{"type":44,"value":571},"X-Amz-Target: RedshiftData.",{"type":39,"tag":159,"props":573,"children":574},{"style":178},[575],{"type":44,"value":507},{"type":39,"tag":159,"props":577,"children":578},{"style":172},[579],{"type":44,"value":580},"action",{"type":39,"tag":159,"props":582,"children":583},{"style":178},[584],{"type":44,"value":585},"}\"",{"type":39,"tag":159,"props":587,"children":588},{"style":172},[589],{"type":44,"value":531},{"type":39,"tag":159,"props":591,"children":592},{"class":161,"line":388},[593,597,601,606,610],{"type":39,"tag":159,"props":594,"children":595},{"style":189},[596],{"type":44,"value":539},{"type":39,"tag":159,"props":598,"children":599},{"style":178},[600],{"type":44,"value":497},{"type":39,"tag":159,"props":602,"children":603},{"style":189},[604],{"type":44,"value":605},"Authorization: placeholder",{"type":39,"tag":159,"props":607,"children":608},{"style":178},[609],{"type":44,"value":186},{"type":39,"tag":159,"props":611,"children":612},{"style":172},[613],{"type":44,"value":531},{"type":39,"tag":159,"props":615,"children":616},{"class":161,"line":397},[617,622,626,631,636,640,645,650,655,660,665,670,675,680,684],{"type":39,"tag":159,"props":618,"children":619},{"style":189},[620],{"type":44,"value":621},"    -d",{"type":39,"tag":159,"props":623,"children":624},{"style":178},[625],{"type":44,"value":497},{"type":39,"tag":159,"props":627,"children":628},{"style":471},[629],{"type":44,"value":630},"${2",{"type":39,"tag":159,"props":632,"children":633},{"style":178},[634],{"type":44,"value":635},":?",{"type":39,"tag":159,"props":637,"children":638},{"style":172},[639],{"type":44,"value":437},{"type":39,"tag":159,"props":641,"children":642},{"style":172},[643],{"type":44,"value":644}," needs",{"type":39,"tag":159,"props":646,"children":647},{"style":172},[648],{"type":44,"value":649}," a",{"type":39,"tag":159,"props":651,"children":652},{"style":172},[653],{"type":44,"value":654}," JSON",{"type":39,"tag":159,"props":656,"children":657},{"style":172},[658],{"type":44,"value":659}," body",{"type":39,"tag":159,"props":661,"children":662},{"style":172},[663],{"type":44,"value":664}," as",{"type":39,"tag":159,"props":666,"children":667},{"style":172},[668],{"type":44,"value":669}," the",{"type":39,"tag":159,"props":671,"children":672},{"style":172},[673],{"type":44,"value":674}," second",{"type":39,"tag":159,"props":676,"children":677},{"style":172},[678],{"type":44,"value":679}," argument",{"type":39,"tag":159,"props":681,"children":682},{"style":471},[683],{"type":44,"value":517},{"type":39,"tag":159,"props":685,"children":686},{"style":178},[687],{"type":44,"value":326},{"type":39,"tag":159,"props":689,"children":691},{"class":161,"line":690},8,[692],{"type":39,"tag":159,"props":693,"children":694},{"style":178},[695],{"type":44,"value":696},"}\n",{"type":39,"tag":40,"props":698,"children":699},{},[700,705,707,713,715,721],{"type":39,"tag":140,"props":701,"children":702},{},[703],{"type":44,"value":704},"Sanity check",{"type":44,"value":706}," — list databases. A ",{"type":39,"tag":47,"props":708,"children":710},{"className":709},[],[711],{"type":44,"value":712},"200",{"type":44,"value":714}," with a ",{"type":39,"tag":47,"props":716,"children":718},{"className":717},[],[719],{"type":44,"value":720},"Databases",{"type":44,"value":722}," array confirms the workspace is wired\nup and the connection target is right. An error names which layer failed.",{"type":39,"tag":148,"props":724,"children":726},{"className":150,"code":725,"language":152,"meta":153,"style":153},"rsapi ListDatabases \"$(jq -n --argjson t \"$RS_TARGET\" --arg db \"$RS_DATABASE\" \\\n  '$t + {Database: $db}')\" | jq .\n",[727],{"type":39,"tag":47,"props":728,"children":729},{"__ignoreMap":153},[730,792],{"type":39,"tag":159,"props":731,"children":732},{"class":161,"line":162},[733,737,742,747,752,757,761,766,770,775,779,784,788],{"type":39,"tag":159,"props":734,"children":735},{"style":484},[736],{"type":44,"value":437},{"type":39,"tag":159,"props":738,"children":739},{"style":189},[740],{"type":44,"value":741}," ListDatabases",{"type":39,"tag":159,"props":743,"children":744},{"style":178},[745],{"type":44,"value":746}," \"$(",{"type":39,"tag":159,"props":748,"children":749},{"style":484},[750],{"type":44,"value":751},"jq",{"type":39,"tag":159,"props":753,"children":754},{"style":189},[755],{"type":44,"value":756}," -n --argjson t ",{"type":39,"tag":159,"props":758,"children":759},{"style":178},[760],{"type":44,"value":186},{"type":39,"tag":159,"props":762,"children":763},{"style":172},[764],{"type":44,"value":765},"$RS_TARGET",{"type":39,"tag":159,"props":767,"children":768},{"style":178},[769],{"type":44,"value":186},{"type":39,"tag":159,"props":771,"children":772},{"style":189},[773],{"type":44,"value":774}," --arg db ",{"type":39,"tag":159,"props":776,"children":777},{"style":178},[778],{"type":44,"value":186},{"type":39,"tag":159,"props":780,"children":781},{"style":172},[782],{"type":44,"value":783},"$RS_DATABASE",{"type":39,"tag":159,"props":785,"children":786},{"style":178},[787],{"type":44,"value":186},{"type":39,"tag":159,"props":789,"children":790},{"style":172},[791],{"type":44,"value":531},{"type":39,"tag":159,"props":793,"children":794},{"class":161,"line":329},[795,800,805,810,815,820],{"type":39,"tag":159,"props":796,"children":797},{"style":178},[798],{"type":44,"value":799},"  '",{"type":39,"tag":159,"props":801,"children":802},{"style":189},[803],{"type":44,"value":804},"$t + {Database: $db}",{"type":39,"tag":159,"props":806,"children":807},{"style":178},[808],{"type":44,"value":809},"')\"",{"type":39,"tag":159,"props":811,"children":812},{"style":178},[813],{"type":44,"value":814}," |",{"type":39,"tag":159,"props":816,"children":817},{"style":484},[818],{"type":44,"value":819}," jq",{"type":39,"tag":159,"props":821,"children":822},{"style":189},[823],{"type":44,"value":824}," .\n",{"type":39,"tag":112,"props":826,"children":828},{"id":827},"core-operations",[829],{"type":44,"value":830},"Core operations",{"type":39,"tag":40,"props":832,"children":833},{},[834,836,842,844,850,852,857,859,865,866,872],{"type":44,"value":835},"Every action that connects to the database takes the same merged target body —\n",{"type":39,"tag":47,"props":837,"children":839},{"className":838},[],[840],{"type":44,"value":841},"$t + {Database: $db, ...}",{"type":44,"value":843},". Errors come back as ",{"type":39,"tag":47,"props":845,"children":847},{"className":846},[],[848],{"type":44,"value":849},"{\"__type\": \"\u003CException>\", \"message\": \"...\"}",{"type":44,"value":851},"\ninstead of the expected shape; on any call, an absent top-level field (",{"type":39,"tag":47,"props":853,"children":855},{"className":854},[],[856],{"type":44,"value":84},{"type":44,"value":858},", ",{"type":39,"tag":47,"props":860,"children":862},{"className":861},[],[863],{"type":44,"value":864},"Status",{"type":44,"value":858},{"type":39,"tag":47,"props":867,"children":869},{"className":868},[],[870],{"type":44,"value":871},"Records",{"type":44,"value":873},", …)\nmeans you got the error envelope — print it and stop.",{"type":39,"tag":875,"props":876,"children":878},"h3",{"id":877},"_1-run-a-query-scriptsrs_querysh",[879,881,886],{"type":44,"value":880},"1. Run a query (",{"type":39,"tag":47,"props":882,"children":884},{"className":883},[],[885],{"type":44,"value":108},{"type":44,"value":887},")",{"type":39,"tag":40,"props":889,"children":890},{},[891,893,899,901,906,908,913,915,921],{"type":44,"value":892},"Run SQL through the bundled script (path is relative to this skill's directory): it submits with\n",{"type":39,"tag":47,"props":894,"children":896},{"className":895},[],[897],{"type":44,"value":898},"ExecuteStatement",{"type":44,"value":900},", polls ",{"type":39,"tag":47,"props":902,"children":904},{"className":903},[],[905],{"type":44,"value":92},{"type":44,"value":907}," to a terminal state, pages ",{"type":39,"tag":47,"props":909,"children":911},{"className":910},[],[912],{"type":44,"value":100},{"type":44,"value":914}," on\n",{"type":39,"tag":47,"props":916,"children":918},{"className":917},[],[919],{"type":44,"value":920},"NextToken",{"type":44,"value":922},", and decodes the typed one-key cell objects.",{"type":39,"tag":148,"props":924,"children":926},{"className":150,"code":925,"language":152,"meta":153,"style":153},"scripts\u002Frs_query.sh \\\n  'SELECT event_name, COUNT(*) AS n FROM public.events\n   WHERE event_date >= :start GROUP BY 1 ORDER BY 2 DESC LIMIT 20' \\\n  --param start=2024-01-01 --name top-events\n",[927],{"type":39,"tag":47,"props":928,"children":929},{"__ignoreMap":153},[930,941,953,969],{"type":39,"tag":159,"props":931,"children":932},{"class":161,"line":162},[933,937],{"type":39,"tag":159,"props":934,"children":935},{"style":484},[936],{"type":44,"value":108},{"type":39,"tag":159,"props":938,"children":939},{"style":172},[940],{"type":44,"value":531},{"type":39,"tag":159,"props":942,"children":943},{"class":161,"line":329},[944,948],{"type":39,"tag":159,"props":945,"children":946},{"style":178},[947],{"type":44,"value":799},{"type":39,"tag":159,"props":949,"children":950},{"style":189},[951],{"type":44,"value":952},"SELECT event_name, COUNT(*) AS n FROM public.events\n",{"type":39,"tag":159,"props":954,"children":955},{"class":161,"line":338},[956,961,965],{"type":39,"tag":159,"props":957,"children":958},{"style":189},[959],{"type":44,"value":960},"   WHERE event_date >= :start GROUP BY 1 ORDER BY 2 DESC LIMIT 20",{"type":39,"tag":159,"props":962,"children":963},{"style":178},[964],{"type":44,"value":357},{"type":39,"tag":159,"props":966,"children":967},{"style":172},[968],{"type":44,"value":531},{"type":39,"tag":159,"props":970,"children":971},{"class":161,"line":370},[972,977,982,987],{"type":39,"tag":159,"props":973,"children":974},{"style":189},[975],{"type":44,"value":976},"  --param",{"type":39,"tag":159,"props":978,"children":979},{"style":189},[980],{"type":44,"value":981}," start=2024-01-01",{"type":39,"tag":159,"props":983,"children":984},{"style":189},[985],{"type":44,"value":986}," --name",{"type":39,"tag":159,"props":988,"children":989},{"style":189},[990],{"type":44,"value":991}," top-events\n",{"type":39,"tag":222,"props":993,"children":994},{},[995,1030,1073,1100],{"type":39,"tag":226,"props":996,"children":997},{},[998,1000,1005,1007,1012,1014,1020,1022,1028],{"type":44,"value":999},"SQL is one argument (or stdin). Instance specifics come from ",{"type":39,"tag":47,"props":1001,"children":1003},{"className":1002},[],[1004],{"type":44,"value":512},{"type":44,"value":1006}," \u002F ",{"type":39,"tag":47,"props":1008,"children":1010},{"className":1009},[],[1011],{"type":44,"value":218},{"type":44,"value":1013}," \u002F\n",{"type":39,"tag":47,"props":1015,"children":1017},{"className":1016},[],[1018],{"type":44,"value":1019},"RS_DATABASE",{"type":44,"value":1021}," above; ",{"type":39,"tag":47,"props":1023,"children":1025},{"className":1024},[],[1026],{"type":44,"value":1027},"--database",{"type":44,"value":1029}," overrides the database.",{"type":39,"tag":226,"props":1031,"children":1032},{},[1033,1039,1041,1047,1049,1055,1057,1063,1065,1071],{"type":39,"tag":47,"props":1034,"children":1036},{"className":1035},[],[1037],{"type":44,"value":1038},"--param NAME=VALUE",{"type":44,"value":1040}," (repeatable) binds ",{"type":39,"tag":47,"props":1042,"children":1044},{"className":1043},[],[1045],{"type":44,"value":1046},":NAME",{"type":44,"value":1048}," placeholders — values are always strings; the\ndatabase casts them. ",{"type":39,"tag":47,"props":1050,"children":1052},{"className":1051},[],[1053],{"type":44,"value":1054},"--name",{"type":44,"value":1056}," sets ",{"type":39,"tag":47,"props":1058,"children":1060},{"className":1059},[],[1061],{"type":44,"value":1062},"StatementName",{"type":44,"value":1064}," so the query shows up in ",{"type":39,"tag":47,"props":1066,"children":1068},{"className":1067},[],[1069],{"type":44,"value":1070},"ListStatements",{"type":44,"value":1072},".",{"type":39,"tag":226,"props":1074,"children":1075},{},[1076,1082,1084,1090,1092,1098],{"type":39,"tag":47,"props":1077,"children":1079},{"className":1078},[],[1080],{"type":44,"value":1081},"--max-rows N",{"type":44,"value":1083}," caps fetched rows (default 10000, ",{"type":39,"tag":47,"props":1085,"children":1087},{"className":1086},[],[1088],{"type":44,"value":1089},"0",{"type":44,"value":1091}," = everything); ",{"type":39,"tag":47,"props":1093,"children":1095},{"className":1094},[],[1096],{"type":44,"value":1097},"--json",{"type":44,"value":1099}," emits one JSON object\nper row instead of TSV with a header. Statement id, status, duration, and row counts go to stderr.",{"type":39,"tag":226,"props":1101,"children":1102},{},[1103,1105,1110,1112,1118,1120,1126,1128,1134,1136,1142,1144,1150],{"type":44,"value":1104},"Exit codes: ",{"type":39,"tag":47,"props":1106,"children":1108},{"className":1107},[],[1109],{"type":44,"value":1089},{"type":44,"value":1111}," success, ",{"type":39,"tag":47,"props":1113,"children":1115},{"className":1114},[],[1116],{"type":44,"value":1117},"1",{"type":44,"value":1119}," submit failed or SQL ",{"type":39,"tag":47,"props":1121,"children":1123},{"className":1122},[],[1124],{"type":44,"value":1125},"FAILED",{"type":44,"value":1127},"\u002F",{"type":39,"tag":47,"props":1129,"children":1131},{"className":1130},[],[1132],{"type":44,"value":1133},"ABORTED",{"type":44,"value":1135}," (the API's own message on\nstderr), ",{"type":39,"tag":47,"props":1137,"children":1139},{"className":1138},[],[1140],{"type":44,"value":1141},"2",{"type":44,"value":1143}," gave up waiting after ",{"type":39,"tag":47,"props":1145,"children":1147},{"className":1146},[],[1148],{"type":44,"value":1149},"--max-wait",{"type":44,"value":1151}," seconds (default 600) — the statement id is on\nstderr; resume it with operation 2.",{"type":39,"tag":40,"props":1153,"children":1154},{},[1155,1157,1163,1165,1170,1172,1178,1180,1186,1188,1194,1195,1201,1203,1209],{"type":44,"value":1156},"If the script errors, read it — it's plain ",{"type":39,"tag":47,"props":1158,"children":1160},{"className":1159},[],[1161],{"type":44,"value":1162},"curl",{"type":44,"value":1164}," + ",{"type":39,"tag":47,"props":1166,"children":1168},{"className":1167},[],[1169],{"type":44,"value":751},{"type":44,"value":1171}," — and debug against ",{"type":39,"tag":47,"props":1173,"children":1175},{"className":1174},[],[1176],{"type":44,"value":1177},"references\u002Fapi.md",{"type":44,"value":1179},".\nFor ",{"type":39,"tag":47,"props":1181,"children":1183},{"className":1182},[],[1184],{"type":44,"value":1185},"BatchExecuteStatement",{"type":44,"value":1187}," and sub-statement results, session reuse (",{"type":39,"tag":47,"props":1189,"children":1191},{"className":1190},[],[1192],{"type":44,"value":1193},"SessionKeepAliveSeconds",{"type":44,"value":1013},{"type":39,"tag":47,"props":1196,"children":1198},{"className":1197},[],[1199],{"type":44,"value":1200},"SessionId",{"type":44,"value":1202},"), ",{"type":39,"tag":47,"props":1204,"children":1206},{"className":1205},[],[1207],{"type":44,"value":1208},"ResultFormat: CSV",{"type":44,"value":1210},", cancelling, or catalog browsing, use the actions below.",{"type":39,"tag":875,"props":1212,"children":1214},{"id":1213},"_2-resume-a-statement-by-id-describestatement-getstatementresult",[1215,1217,1222,1224,1229],{"type":44,"value":1216},"2. Resume a statement by id (",{"type":39,"tag":47,"props":1218,"children":1220},{"className":1219},[],[1221],{"type":44,"value":92},{"type":44,"value":1223}," → ",{"type":39,"tag":47,"props":1225,"children":1227},{"className":1226},[],[1228],{"type":44,"value":100},{"type":44,"value":887},{"type":39,"tag":40,"props":1231,"children":1232},{},[1233],{"type":44,"value":1234},"When the script exits 2 (timeout) or you have a statement id from elsewhere, poll and fetch\ndirectly:",{"type":39,"tag":148,"props":1236,"children":1238},{"className":150,"code":1237,"language":152,"meta":153,"style":153},"rsapi DescribeStatement \"$(jq -n --arg id \"$ID\" '{Id: $id}')\" \\\n  | jq '{Status, Duration, ResultRows, HasResultSet, Error}'\nrsapi GetStatementResult \"$(jq -n --arg id \"$ID\" '{Id: $id}')\" \\\n  | jq -r '.Records[]? | [.[] | if .isNull then null else to_entries[0].value end] | @tsv'\n",[1239],{"type":39,"tag":47,"props":1240,"children":1241},{"__ignoreMap":153},[1242,1298,1323,1375],{"type":39,"tag":159,"props":1243,"children":1244},{"class":161,"line":162},[1245,1249,1254,1258,1262,1267,1271,1276,1280,1285,1290,1294],{"type":39,"tag":159,"props":1246,"children":1247},{"style":484},[1248],{"type":44,"value":437},{"type":39,"tag":159,"props":1250,"children":1251},{"style":189},[1252],{"type":44,"value":1253}," DescribeStatement",{"type":39,"tag":159,"props":1255,"children":1256},{"style":178},[1257],{"type":44,"value":746},{"type":39,"tag":159,"props":1259,"children":1260},{"style":484},[1261],{"type":44,"value":751},{"type":39,"tag":159,"props":1263,"children":1264},{"style":189},[1265],{"type":44,"value":1266}," -n --arg id ",{"type":39,"tag":159,"props":1268,"children":1269},{"style":178},[1270],{"type":44,"value":186},{"type":39,"tag":159,"props":1272,"children":1273},{"style":172},[1274],{"type":44,"value":1275},"$ID",{"type":39,"tag":159,"props":1277,"children":1278},{"style":178},[1279],{"type":44,"value":186},{"type":39,"tag":159,"props":1281,"children":1282},{"style":178},[1283],{"type":44,"value":1284}," '",{"type":39,"tag":159,"props":1286,"children":1287},{"style":189},[1288],{"type":44,"value":1289},"{Id: $id}",{"type":39,"tag":159,"props":1291,"children":1292},{"style":178},[1293],{"type":44,"value":809},{"type":39,"tag":159,"props":1295,"children":1296},{"style":172},[1297],{"type":44,"value":531},{"type":39,"tag":159,"props":1299,"children":1300},{"class":161,"line":329},[1301,1306,1310,1314,1319],{"type":39,"tag":159,"props":1302,"children":1303},{"style":178},[1304],{"type":44,"value":1305},"  |",{"type":39,"tag":159,"props":1307,"children":1308},{"style":484},[1309],{"type":44,"value":819},{"type":39,"tag":159,"props":1311,"children":1312},{"style":178},[1313],{"type":44,"value":1284},{"type":39,"tag":159,"props":1315,"children":1316},{"style":189},[1317],{"type":44,"value":1318},"{Status, Duration, ResultRows, HasResultSet, Error}",{"type":39,"tag":159,"props":1320,"children":1321},{"style":178},[1322],{"type":44,"value":367},{"type":39,"tag":159,"props":1324,"children":1325},{"class":161,"line":338},[1326,1330,1335,1339,1343,1347,1351,1355,1359,1363,1367,1371],{"type":39,"tag":159,"props":1327,"children":1328},{"style":484},[1329],{"type":44,"value":437},{"type":39,"tag":159,"props":1331,"children":1332},{"style":189},[1333],{"type":44,"value":1334}," GetStatementResult",{"type":39,"tag":159,"props":1336,"children":1337},{"style":178},[1338],{"type":44,"value":746},{"type":39,"tag":159,"props":1340,"children":1341},{"style":484},[1342],{"type":44,"value":751},{"type":39,"tag":159,"props":1344,"children":1345},{"style":189},[1346],{"type":44,"value":1266},{"type":39,"tag":159,"props":1348,"children":1349},{"style":178},[1350],{"type":44,"value":186},{"type":39,"tag":159,"props":1352,"children":1353},{"style":172},[1354],{"type":44,"value":1275},{"type":39,"tag":159,"props":1356,"children":1357},{"style":178},[1358],{"type":44,"value":186},{"type":39,"tag":159,"props":1360,"children":1361},{"style":178},[1362],{"type":44,"value":1284},{"type":39,"tag":159,"props":1364,"children":1365},{"style":189},[1366],{"type":44,"value":1289},{"type":39,"tag":159,"props":1368,"children":1369},{"style":178},[1370],{"type":44,"value":809},{"type":39,"tag":159,"props":1372,"children":1373},{"style":172},[1374],{"type":44,"value":531},{"type":39,"tag":159,"props":1376,"children":1377},{"class":161,"line":370},[1378,1382,1386,1391,1395,1400],{"type":39,"tag":159,"props":1379,"children":1380},{"style":178},[1381],{"type":44,"value":1305},{"type":39,"tag":159,"props":1383,"children":1384},{"style":484},[1385],{"type":44,"value":819},{"type":39,"tag":159,"props":1387,"children":1388},{"style":189},[1389],{"type":44,"value":1390}," -r",{"type":39,"tag":159,"props":1392,"children":1393},{"style":178},[1394],{"type":44,"value":1284},{"type":39,"tag":159,"props":1396,"children":1397},{"style":189},[1398],{"type":44,"value":1399},".Records[]? | [.[] | if .isNull then null else to_entries[0].value end] | @tsv",{"type":39,"tag":159,"props":1401,"children":1402},{"style":178},[1403],{"type":44,"value":367},{"type":39,"tag":222,"props":1405,"children":1406},{},[1407,1502],{"type":39,"tag":226,"props":1408,"children":1409},{},[1410,1415,1417,1423,1424,1430,1431,1437,1438,1444,1445,1450,1451,1456,1458,1463,1465,1471,1473,1478,1480,1486,1488,1494,1496,1501],{"type":39,"tag":47,"props":1411,"children":1413},{"className":1412},[],[1414],{"type":44,"value":864},{"type":44,"value":1416}," ∈ ",{"type":39,"tag":47,"props":1418,"children":1420},{"className":1419},[],[1421],{"type":44,"value":1422},"SUBMITTED",{"type":44,"value":858},{"type":39,"tag":47,"props":1425,"children":1427},{"className":1426},[],[1428],{"type":44,"value":1429},"PICKED",{"type":44,"value":858},{"type":39,"tag":47,"props":1432,"children":1434},{"className":1433},[],[1435],{"type":44,"value":1436},"STARTED",{"type":44,"value":858},{"type":39,"tag":47,"props":1439,"children":1441},{"className":1440},[],[1442],{"type":44,"value":1443},"FINISHED",{"type":44,"value":858},{"type":39,"tag":47,"props":1446,"children":1448},{"className":1447},[],[1449],{"type":44,"value":1125},{"type":44,"value":858},{"type":39,"tag":47,"props":1452,"children":1454},{"className":1453},[],[1455],{"type":44,"value":1133},{"type":44,"value":1457},". Only ",{"type":39,"tag":47,"props":1459,"children":1461},{"className":1460},[],[1462],{"type":44,"value":1443},{"type":44,"value":1464},"\nwith ",{"type":39,"tag":47,"props":1466,"children":1468},{"className":1467},[],[1469],{"type":44,"value":1470},"HasResultSet: true",{"type":44,"value":1472}," has rows; ",{"type":39,"tag":47,"props":1474,"children":1476},{"className":1475},[],[1477],{"type":44,"value":1125},{"type":44,"value":1479}," carries the SQL error in ",{"type":39,"tag":47,"props":1481,"children":1483},{"className":1482},[],[1484],{"type":44,"value":1485},".Error",{"type":44,"value":1487},". ",{"type":39,"tag":47,"props":1489,"children":1491},{"className":1490},[],[1492],{"type":44,"value":1493},"Duration",{"type":44,"value":1495}," is\n",{"type":39,"tag":140,"props":1497,"children":1498},{},[1499],{"type":44,"value":1500},"nanoseconds",{"type":44,"value":1072},{"type":39,"tag":226,"props":1503,"children":1504},{},[1505,1507,1513,1515,1520,1522,1528],{"type":44,"value":1506},"Result cells are typed one-key objects (see the gotcha under Error handling); column names\u002Ftypes\nare in ",{"type":39,"tag":47,"props":1508,"children":1510},{"className":1509},[],[1511],{"type":44,"value":1512},".ColumnMetadata",{"type":44,"value":1514}," on the first page. Further pages follow ",{"type":39,"tag":47,"props":1516,"children":1518},{"className":1517},[],[1519],{"type":44,"value":920},{"type":44,"value":1521}," — no page-size knob;\n",{"type":39,"tag":47,"props":1523,"children":1525},{"className":1524},[],[1526],{"type":44,"value":1527},"DescribeStatement.ResultRows",{"type":44,"value":1529}," is the total up front.",{"type":39,"tag":875,"props":1531,"children":1533},{"id":1532},"_3-cancel-a-running-statement-cancelstatement",[1534,1536,1542],{"type":44,"value":1535},"3. Cancel a running statement (",{"type":39,"tag":47,"props":1537,"children":1539},{"className":1538},[],[1540],{"type":44,"value":1541},"CancelStatement",{"type":44,"value":887},{"type":39,"tag":148,"props":1544,"children":1546},{"className":150,"code":1545,"language":152,"meta":153,"style":153},"rsapi CancelStatement \"$(jq -n --arg id \"$ID\" '{Id: $id}')\" | jq .\n# {\"Status\": true} on success — best-effort, check DescribeStatement to confirm.\n",[1547],{"type":39,"tag":47,"props":1548,"children":1549},{"__ignoreMap":153},[1550,1610],{"type":39,"tag":159,"props":1551,"children":1552},{"class":161,"line":162},[1553,1557,1562,1566,1570,1574,1578,1582,1586,1590,1594,1598,1602,1606],{"type":39,"tag":159,"props":1554,"children":1555},{"style":484},[1556],{"type":44,"value":437},{"type":39,"tag":159,"props":1558,"children":1559},{"style":189},[1560],{"type":44,"value":1561}," CancelStatement",{"type":39,"tag":159,"props":1563,"children":1564},{"style":178},[1565],{"type":44,"value":746},{"type":39,"tag":159,"props":1567,"children":1568},{"style":484},[1569],{"type":44,"value":751},{"type":39,"tag":159,"props":1571,"children":1572},{"style":189},[1573],{"type":44,"value":1266},{"type":39,"tag":159,"props":1575,"children":1576},{"style":178},[1577],{"type":44,"value":186},{"type":39,"tag":159,"props":1579,"children":1580},{"style":172},[1581],{"type":44,"value":1275},{"type":39,"tag":159,"props":1583,"children":1584},{"style":178},[1585],{"type":44,"value":186},{"type":39,"tag":159,"props":1587,"children":1588},{"style":178},[1589],{"type":44,"value":1284},{"type":39,"tag":159,"props":1591,"children":1592},{"style":189},[1593],{"type":44,"value":1289},{"type":39,"tag":159,"props":1595,"children":1596},{"style":178},[1597],{"type":44,"value":809},{"type":39,"tag":159,"props":1599,"children":1600},{"style":178},[1601],{"type":44,"value":814},{"type":39,"tag":159,"props":1603,"children":1604},{"style":484},[1605],{"type":44,"value":819},{"type":39,"tag":159,"props":1607,"children":1608},{"style":189},[1609],{"type":44,"value":824},{"type":39,"tag":159,"props":1611,"children":1612},{"class":161,"line":329},[1613],{"type":39,"tag":159,"props":1614,"children":1615},{"style":199},[1616],{"type":44,"value":1617},"# {\"Status\": true} on success — best-effort, check DescribeStatement to confirm.\n",{"type":39,"tag":875,"props":1619,"children":1621},{"id":1620},"_4-run-multiple-statements-in-one-call-batchexecutestatement",[1622,1624,1629],{"type":44,"value":1623},"4. Run multiple statements in one call (",{"type":39,"tag":47,"props":1625,"children":1627},{"className":1626},[],[1628],{"type":44,"value":1185},{"type":44,"value":887},{"type":39,"tag":40,"props":1631,"children":1632},{},[1633],{"type":44,"value":1634},"All statements run in one transaction — all commit or all roll back.",{"type":39,"tag":148,"props":1636,"children":1638},{"className":150,"code":1637,"language":152,"meta":153,"style":153},"rsapi BatchExecuteStatement \"$(jq -n --argjson t \"$RS_TARGET\" --arg db \"$RS_DATABASE\" '$t + {\n    Database: $db,\n    Sqls: [\"CREATE TEMP TABLE tmp AS SELECT 1 AS x\", \"SELECT * FROM tmp\"]\n  }')\" | jq '{Id}'\n",[1639],{"type":39,"tag":47,"props":1640,"children":1641},{"__ignoreMap":153},[1642,1703,1711,1719],{"type":39,"tag":159,"props":1643,"children":1644},{"class":161,"line":162},[1645,1649,1654,1658,1662,1666,1670,1674,1678,1682,1686,1690,1694,1698],{"type":39,"tag":159,"props":1646,"children":1647},{"style":484},[1648],{"type":44,"value":437},{"type":39,"tag":159,"props":1650,"children":1651},{"style":189},[1652],{"type":44,"value":1653}," BatchExecuteStatement",{"type":39,"tag":159,"props":1655,"children":1656},{"style":178},[1657],{"type":44,"value":746},{"type":39,"tag":159,"props":1659,"children":1660},{"style":484},[1661],{"type":44,"value":751},{"type":39,"tag":159,"props":1663,"children":1664},{"style":189},[1665],{"type":44,"value":756},{"type":39,"tag":159,"props":1667,"children":1668},{"style":178},[1669],{"type":44,"value":186},{"type":39,"tag":159,"props":1671,"children":1672},{"style":172},[1673],{"type":44,"value":765},{"type":39,"tag":159,"props":1675,"children":1676},{"style":178},[1677],{"type":44,"value":186},{"type":39,"tag":159,"props":1679,"children":1680},{"style":189},[1681],{"type":44,"value":774},{"type":39,"tag":159,"props":1683,"children":1684},{"style":178},[1685],{"type":44,"value":186},{"type":39,"tag":159,"props":1687,"children":1688},{"style":172},[1689],{"type":44,"value":783},{"type":39,"tag":159,"props":1691,"children":1692},{"style":178},[1693],{"type":44,"value":186},{"type":39,"tag":159,"props":1695,"children":1696},{"style":178},[1697],{"type":44,"value":1284},{"type":39,"tag":159,"props":1699,"children":1700},{"style":189},[1701],{"type":44,"value":1702},"$t + {\n",{"type":39,"tag":159,"props":1704,"children":1705},{"class":161,"line":329},[1706],{"type":39,"tag":159,"props":1707,"children":1708},{"style":189},[1709],{"type":44,"value":1710},"    Database: $db,\n",{"type":39,"tag":159,"props":1712,"children":1713},{"class":161,"line":338},[1714],{"type":39,"tag":159,"props":1715,"children":1716},{"style":189},[1717],{"type":44,"value":1718},"    Sqls: [\"CREATE TEMP TABLE tmp AS SELECT 1 AS x\", \"SELECT * FROM tmp\"]\n",{"type":39,"tag":159,"props":1720,"children":1721},{"class":161,"line":370},[1722,1727,1731,1735,1739,1743,1748],{"type":39,"tag":159,"props":1723,"children":1724},{"style":189},[1725],{"type":44,"value":1726},"  }",{"type":39,"tag":159,"props":1728,"children":1729},{"style":178},[1730],{"type":44,"value":809},{"type":39,"tag":159,"props":1732,"children":1733},{"style":178},[1734],{"type":44,"value":814},{"type":39,"tag":159,"props":1736,"children":1737},{"style":484},[1738],{"type":44,"value":819},{"type":39,"tag":159,"props":1740,"children":1741},{"style":178},[1742],{"type":44,"value":1284},{"type":39,"tag":159,"props":1744,"children":1745},{"style":189},[1746],{"type":44,"value":1747},"{Id}",{"type":39,"tag":159,"props":1749,"children":1750},{"style":178},[1751],{"type":44,"value":367},{"type":39,"tag":40,"props":1753,"children":1754},{},[1755,1760,1762,1767,1769,1775,1777,1782,1784,1790,1791,1797,1799,1804,1806,1812,1814,1819],{"type":39,"tag":47,"props":1756,"children":1758},{"className":1757},[],[1759],{"type":44,"value":92},{"type":44,"value":1761}," on the parent ",{"type":39,"tag":47,"props":1763,"children":1765},{"className":1764},[],[1766],{"type":44,"value":84},{"type":44,"value":1768}," returns a ",{"type":39,"tag":47,"props":1770,"children":1772},{"className":1771},[],[1773],{"type":44,"value":1774},"SubStatements[]",{"type":44,"value":1776}," array. Each sub-statement has its\nown ",{"type":39,"tag":47,"props":1778,"children":1780},{"className":1779},[],[1781],{"type":44,"value":84},{"type":44,"value":1783}," (the parent ID with a ",{"type":39,"tag":47,"props":1785,"children":1787},{"className":1786},[],[1788],{"type":44,"value":1789},":1",{"type":44,"value":858},{"type":39,"tag":47,"props":1792,"children":1794},{"className":1793},[],[1795],{"type":44,"value":1796},":2",{"type":44,"value":1798},", … suffix), ",{"type":39,"tag":47,"props":1800,"children":1802},{"className":1801},[],[1803],{"type":44,"value":864},{"type":44,"value":1805},", and ",{"type":39,"tag":47,"props":1807,"children":1809},{"className":1808},[],[1810],{"type":44,"value":1811},"HasResultSet",{"type":44,"value":1813}," — fetch each\nsub-statement's results with its own ",{"type":39,"tag":47,"props":1815,"children":1817},{"className":1816},[],[1818],{"type":44,"value":100},{"type":44,"value":1820}," call.",{"type":39,"tag":875,"props":1822,"children":1824},{"id":1823},"_5-list-recent-statements-liststatements",[1825,1827,1832],{"type":44,"value":1826},"5. List recent statements (",{"type":39,"tag":47,"props":1828,"children":1830},{"className":1829},[],[1831],{"type":44,"value":1070},{"type":44,"value":887},{"type":39,"tag":148,"props":1834,"children":1836},{"className":150,"code":1835,"language":152,"meta":153,"style":153},"rsapi ListStatements '{\"MaxResults\": 20, \"Status\": \"ALL\"}' \\\n  | jq '.Statements[] | {Id, StatementName, Status, QueryString: (.QueryString[0:80]), CreatedAt}'\n",[1837],{"type":39,"tag":47,"props":1838,"children":1839},{"__ignoreMap":153},[1840,1869],{"type":39,"tag":159,"props":1841,"children":1842},{"class":161,"line":162},[1843,1847,1852,1856,1861,1865],{"type":39,"tag":159,"props":1844,"children":1845},{"style":484},[1846],{"type":44,"value":437},{"type":39,"tag":159,"props":1848,"children":1849},{"style":189},[1850],{"type":44,"value":1851}," ListStatements",{"type":39,"tag":159,"props":1853,"children":1854},{"style":178},[1855],{"type":44,"value":1284},{"type":39,"tag":159,"props":1857,"children":1858},{"style":189},[1859],{"type":44,"value":1860},"{\"MaxResults\": 20, \"Status\": \"ALL\"}",{"type":39,"tag":159,"props":1862,"children":1863},{"style":178},[1864],{"type":44,"value":357},{"type":39,"tag":159,"props":1866,"children":1867},{"style":172},[1868],{"type":44,"value":531},{"type":39,"tag":159,"props":1870,"children":1871},{"class":161,"line":329},[1872,1876,1880,1884,1889],{"type":39,"tag":159,"props":1873,"children":1874},{"style":178},[1875],{"type":44,"value":1305},{"type":39,"tag":159,"props":1877,"children":1878},{"style":484},[1879],{"type":44,"value":819},{"type":39,"tag":159,"props":1881,"children":1882},{"style":178},[1883],{"type":44,"value":1284},{"type":39,"tag":159,"props":1885,"children":1886},{"style":189},[1887],{"type":44,"value":1888},".Statements[] | {Id, StatementName, Status, QueryString: (.QueryString[0:80]), CreatedAt}",{"type":39,"tag":159,"props":1890,"children":1891},{"style":178},[1892],{"type":44,"value":367},{"type":39,"tag":40,"props":1894,"children":1895},{},[1896,1901,1903,1908,1909,1914,1915,1920,1921,1926,1927,1932,1933,1938,1939,1945,1947,1952,1953,1959,1961,1967,1969,1975,1977,1983],{"type":39,"tag":47,"props":1897,"children":1899},{"className":1898},[],[1900],{"type":44,"value":864},{"type":44,"value":1902}," filter: ",{"type":39,"tag":47,"props":1904,"children":1906},{"className":1905},[],[1907],{"type":44,"value":1422},{"type":44,"value":858},{"type":39,"tag":47,"props":1910,"children":1912},{"className":1911},[],[1913],{"type":44,"value":1429},{"type":44,"value":858},{"type":39,"tag":47,"props":1916,"children":1918},{"className":1917},[],[1919],{"type":44,"value":1436},{"type":44,"value":858},{"type":39,"tag":47,"props":1922,"children":1924},{"className":1923},[],[1925],{"type":44,"value":1443},{"type":44,"value":858},{"type":39,"tag":47,"props":1928,"children":1930},{"className":1929},[],[1931],{"type":44,"value":1125},{"type":44,"value":858},{"type":39,"tag":47,"props":1934,"children":1936},{"className":1935},[],[1937],{"type":44,"value":1133},{"type":44,"value":858},{"type":39,"tag":47,"props":1940,"children":1942},{"className":1941},[],[1943],{"type":44,"value":1944},"ALL",{"type":44,"value":1946}," — ",{"type":39,"tag":140,"props":1948,"children":1949},{},[1950],{"type":44,"value":1951},"only\nfinished statements are listed if you omit it",{"type":44,"value":1487},{"type":39,"tag":47,"props":1954,"children":1956},{"className":1955},[],[1957],{"type":44,"value":1958},"MaxResults",{"type":44,"value":1960}," 0–100. ",{"type":39,"tag":47,"props":1962,"children":1964},{"className":1963},[],[1965],{"type":44,"value":1966},"RoleLevel",{"type":44,"value":1968}," defaults to ",{"type":39,"tag":47,"props":1970,"children":1972},{"className":1971},[],[1973],{"type":44,"value":1974},"true",{"type":44,"value":1976},"\n(includes statements from anyone assuming the same IAM role); set ",{"type":39,"tag":47,"props":1978,"children":1980},{"className":1979},[],[1981],{"type":44,"value":1982},"false",{"type":44,"value":1984}," to see only this session's.",{"type":39,"tag":875,"props":1986,"children":1988},{"id":1987},"_6-browse-the-catalog-listdatabases-listschemas-listtables-describetable",[1989,1991,1997,1998,2004,2005,2011,2012,2018],{"type":44,"value":1990},"6. Browse the catalog (",{"type":39,"tag":47,"props":1992,"children":1994},{"className":1993},[],[1995],{"type":44,"value":1996},"ListDatabases",{"type":44,"value":1006},{"type":39,"tag":47,"props":1999,"children":2001},{"className":2000},[],[2002],{"type":44,"value":2003},"ListSchemas",{"type":44,"value":1006},{"type":39,"tag":47,"props":2006,"children":2008},{"className":2007},[],[2009],{"type":44,"value":2010},"ListTables",{"type":44,"value":1006},{"type":39,"tag":47,"props":2013,"children":2015},{"className":2014},[],[2016],{"type":44,"value":2017},"DescribeTable",{"type":44,"value":887},{"type":39,"tag":40,"props":2020,"children":2021},{},[2022,2024,2030,2032,2038,2039,2045],{"type":44,"value":2023},"All four take the merged target body. Patterns use SQL ",{"type":39,"tag":47,"props":2025,"children":2027},{"className":2026},[],[2028],{"type":44,"value":2029},"LIKE",{"type":44,"value":2031}," wildcards (",{"type":39,"tag":47,"props":2033,"children":2035},{"className":2034},[],[2036],{"type":44,"value":2037},"%",{"type":44,"value":858},{"type":39,"tag":47,"props":2040,"children":2042},{"className":2041},[],[2043],{"type":44,"value":2044},"_",{"type":44,"value":2046},").",{"type":39,"tag":222,"props":2048,"children":2049},{},[2050,2070,2097,2184],{"type":39,"tag":226,"props":2051,"children":2052},{},[2053,2061,2062,2068],{"type":39,"tag":140,"props":2054,"children":2055},{},[2056],{"type":39,"tag":47,"props":2057,"children":2059},{"className":2058},[],[2060],{"type":44,"value":1996},{"type":44,"value":1946},{"type":39,"tag":47,"props":2063,"children":2065},{"className":2064},[],[2066],{"type":44,"value":2067},"Databases[]",{"type":44,"value":2069}," (strings)",{"type":39,"tag":226,"props":2071,"children":2072},{},[2073,2081,2082,2088,2090,2096],{"type":39,"tag":140,"props":2074,"children":2075},{},[2076],{"type":39,"tag":47,"props":2077,"children":2079},{"className":2078},[],[2080],{"type":44,"value":2003},{"type":44,"value":1946},{"type":39,"tag":47,"props":2083,"children":2085},{"className":2084},[],[2086],{"type":44,"value":2087},"SchemaPattern",{"type":44,"value":2089}," (optional) — ",{"type":39,"tag":47,"props":2091,"children":2093},{"className":2092},[],[2094],{"type":44,"value":2095},"Schemas[]",{"type":44,"value":2069},{"type":39,"tag":226,"props":2098,"children":2099},{},[2100,2108,2109,2114,2115,2121,2122,2128,2129,2135,2136,2142,2143,2149,2150,2156,2157,2163,2164,2170,2171,2177,2178],{"type":39,"tag":140,"props":2101,"children":2102},{},[2103],{"type":39,"tag":47,"props":2104,"children":2106},{"className":2105},[],[2107],{"type":44,"value":2010},{"type":44,"value":1946},{"type":39,"tag":47,"props":2110,"children":2112},{"className":2111},[],[2113],{"type":44,"value":2087},{"type":44,"value":858},{"type":39,"tag":47,"props":2116,"children":2118},{"className":2117},[],[2119],{"type":44,"value":2120},"TablePattern",{"type":44,"value":1946},{"type":39,"tag":47,"props":2123,"children":2125},{"className":2124},[],[2126],{"type":44,"value":2127},"Tables[] {schema, name, type}",{"type":44,"value":1946},{"type":39,"tag":47,"props":2130,"children":2132},{"className":2131},[],[2133],{"type":44,"value":2134},"type",{"type":44,"value":1416},{"type":39,"tag":47,"props":2137,"children":2139},{"className":2138},[],[2140],{"type":44,"value":2141},"TABLE",{"type":44,"value":1127},{"type":39,"tag":47,"props":2144,"children":2146},{"className":2145},[],[2147],{"type":44,"value":2148},"VIEW",{"type":44,"value":1127},{"type":39,"tag":47,"props":2151,"children":2153},{"className":2152},[],[2154],{"type":44,"value":2155},"SYSTEM TABLE",{"type":44,"value":1127},{"type":39,"tag":47,"props":2158,"children":2160},{"className":2159},[],[2161],{"type":44,"value":2162},"GLOBAL TEMPORARY",{"type":44,"value":1127},{"type":39,"tag":47,"props":2165,"children":2167},{"className":2166},[],[2168],{"type":44,"value":2169},"LOCAL TEMPORARY",{"type":44,"value":1127},{"type":39,"tag":47,"props":2172,"children":2174},{"className":2173},[],[2175],{"type":44,"value":2176},"ALIAS",{"type":44,"value":1127},{"type":39,"tag":47,"props":2179,"children":2181},{"className":2180},[],[2182],{"type":44,"value":2183},"SYNONYM",{"type":39,"tag":226,"props":2185,"children":2186},{},[2187,2195,2196,2202,2203,2209,2210],{"type":39,"tag":140,"props":2188,"children":2189},{},[2190],{"type":39,"tag":47,"props":2191,"children":2193},{"className":2192},[],[2194],{"type":44,"value":2017},{"type":44,"value":1946},{"type":39,"tag":47,"props":2197,"children":2199},{"className":2198},[],[2200],{"type":44,"value":2201},"Schema",{"type":44,"value":858},{"type":39,"tag":47,"props":2204,"children":2206},{"className":2205},[],[2207],{"type":44,"value":2208},"Table",{"type":44,"value":1946},{"type":39,"tag":47,"props":2211,"children":2213},{"className":2212},[],[2214],{"type":44,"value":2215},"ColumnList[] {name, typeName, nullable, length, precision}",{"type":39,"tag":148,"props":2217,"children":2219},{"className":150,"code":2218,"language":152,"meta":153,"style":153},"rsapi ListTables \"$(jq -n --argjson t \"$RS_TARGET\" --arg db \"$RS_DATABASE\" \\\n  '$t + {Database: $db, SchemaPattern: \"public\", TablePattern: \"ev%\"}')\" | jq '.Tables'\n",[2220],{"type":39,"tag":47,"props":2221,"children":2222},{"__ignoreMap":153},[2223,2279],{"type":39,"tag":159,"props":2224,"children":2225},{"class":161,"line":162},[2226,2230,2235,2239,2243,2247,2251,2255,2259,2263,2267,2271,2275],{"type":39,"tag":159,"props":2227,"children":2228},{"style":484},[2229],{"type":44,"value":437},{"type":39,"tag":159,"props":2231,"children":2232},{"style":189},[2233],{"type":44,"value":2234}," ListTables",{"type":39,"tag":159,"props":2236,"children":2237},{"style":178},[2238],{"type":44,"value":746},{"type":39,"tag":159,"props":2240,"children":2241},{"style":484},[2242],{"type":44,"value":751},{"type":39,"tag":159,"props":2244,"children":2245},{"style":189},[2246],{"type":44,"value":756},{"type":39,"tag":159,"props":2248,"children":2249},{"style":178},[2250],{"type":44,"value":186},{"type":39,"tag":159,"props":2252,"children":2253},{"style":172},[2254],{"type":44,"value":765},{"type":39,"tag":159,"props":2256,"children":2257},{"style":178},[2258],{"type":44,"value":186},{"type":39,"tag":159,"props":2260,"children":2261},{"style":189},[2262],{"type":44,"value":774},{"type":39,"tag":159,"props":2264,"children":2265},{"style":178},[2266],{"type":44,"value":186},{"type":39,"tag":159,"props":2268,"children":2269},{"style":172},[2270],{"type":44,"value":783},{"type":39,"tag":159,"props":2272,"children":2273},{"style":178},[2274],{"type":44,"value":186},{"type":39,"tag":159,"props":2276,"children":2277},{"style":172},[2278],{"type":44,"value":531},{"type":39,"tag":159,"props":2280,"children":2281},{"class":161,"line":329},[2282,2286,2291,2295,2299,2303,2307,2312],{"type":39,"tag":159,"props":2283,"children":2284},{"style":178},[2285],{"type":44,"value":799},{"type":39,"tag":159,"props":2287,"children":2288},{"style":189},[2289],{"type":44,"value":2290},"$t + {Database: $db, SchemaPattern: \"public\", TablePattern: \"ev%\"}",{"type":39,"tag":159,"props":2292,"children":2293},{"style":178},[2294],{"type":44,"value":809},{"type":39,"tag":159,"props":2296,"children":2297},{"style":178},[2298],{"type":44,"value":814},{"type":39,"tag":159,"props":2300,"children":2301},{"style":484},[2302],{"type":44,"value":819},{"type":39,"tag":159,"props":2304,"children":2305},{"style":178},[2306],{"type":44,"value":1284},{"type":39,"tag":159,"props":2308,"children":2309},{"style":189},[2310],{"type":44,"value":2311},".Tables",{"type":39,"tag":159,"props":2313,"children":2314},{"style":178},[2315],{"type":44,"value":367},{"type":39,"tag":40,"props":2317,"children":2318},{},[2319,2321,2326,2328,2334,2336,2341,2343,2348],{"type":44,"value":2320},"JSON field names are PascalCase (",{"type":39,"tag":47,"props":2322,"children":2324},{"className":2323},[],[2325],{"type":44,"value":241},{"type":44,"value":2327},", not ",{"type":39,"tag":47,"props":2329,"children":2331},{"className":2330},[],[2332],{"type":44,"value":2333},"workgroup-name",{"type":44,"value":2335},"). All four are paginated\n(",{"type":39,"tag":47,"props":2337,"children":2339},{"className":2338},[],[2340],{"type":44,"value":920},{"type":44,"value":2342},"). See ",{"type":39,"tag":47,"props":2344,"children":2346},{"className":2345},[],[2347],{"type":44,"value":1177},{"type":44,"value":2349}," for every action's body shape.",{"type":39,"tag":112,"props":2351,"children":2353},{"id":2352},"pagination",[2354],{"type":44,"value":2355},"Pagination",{"type":39,"tag":40,"props":2357,"children":2358},{},[2359,2364,2365,2370,2371,2376,2377,2382,2383,2388,2390,2395,2397,2402,2404,2409],{"type":39,"tag":47,"props":2360,"children":2362},{"className":2361},[],[2363],{"type":44,"value":100},{"type":44,"value":858},{"type":39,"tag":47,"props":2366,"children":2368},{"className":2367},[],[2369],{"type":44,"value":1070},{"type":44,"value":858},{"type":39,"tag":47,"props":2372,"children":2374},{"className":2373},[],[2375],{"type":44,"value":1996},{"type":44,"value":858},{"type":39,"tag":47,"props":2378,"children":2380},{"className":2379},[],[2381],{"type":44,"value":2003},{"type":44,"value":858},{"type":39,"tag":47,"props":2384,"children":2386},{"className":2385},[],[2387],{"type":44,"value":2010},{"type":44,"value":2389},", and\n",{"type":39,"tag":47,"props":2391,"children":2393},{"className":2392},[],[2394],{"type":44,"value":2017},{"type":44,"value":2396}," all use the same scheme: the response carries ",{"type":39,"tag":47,"props":2398,"children":2400},{"className":2399},[],[2401],{"type":44,"value":920},{"type":44,"value":2403}," when there's more; pass it\nback as ",{"type":39,"tag":47,"props":2405,"children":2407},{"className":2406},[],[2408],{"type":44,"value":920},{"type":44,"value":2410}," in the next request body. Stop when it's absent.",{"type":39,"tag":112,"props":2412,"children":2414},{"id":2413},"rate-limits",[2415],{"type":44,"value":2416},"Rate limits",{"type":39,"tag":222,"props":2418,"children":2419},{},[2420,2450,2475,2499,2516],{"type":39,"tag":226,"props":2421,"children":2422},{},[2423,2428,2430,2435,2436,2441,2443,2449],{"type":39,"tag":140,"props":2424,"children":2425},{},[2426],{"type":44,"value":2427},"Active statements",{"type":44,"value":2429}," — up to 500 active (",{"type":39,"tag":47,"props":2431,"children":2433},{"className":2432},[],[2434],{"type":44,"value":1422},{"type":44,"value":1127},{"type":39,"tag":47,"props":2437,"children":2439},{"className":2438},[],[2440],{"type":44,"value":1436},{"type":44,"value":2442},") per cluster or workgroup. Excess\nsubmits fail with ",{"type":39,"tag":47,"props":2444,"children":2446},{"className":2445},[],[2447],{"type":44,"value":2448},"ActiveStatementsExceededException",{"type":44,"value":1072},{"type":39,"tag":226,"props":2451,"children":2452},{},[2453,2458,2460,2466,2468,2474],{"type":39,"tag":140,"props":2454,"children":2455},{},[2456],{"type":44,"value":2457},"Result size",{"type":44,"value":2459}," — 500 MB per statement (after gzip) and 64 KB per row. Larger results fail; add a\n",{"type":39,"tag":47,"props":2461,"children":2463},{"className":2462},[],[2464],{"type":44,"value":2465},"LIMIT",{"type":44,"value":2467}," or use ",{"type":39,"tag":47,"props":2469,"children":2471},{"className":2470},[],[2472],{"type":44,"value":2473},"UNLOAD ... TO 's3:\u002F\u002F...'",{"type":44,"value":1072},{"type":39,"tag":226,"props":2476,"children":2477},{},[2478,2483,2485,2490,2492,2498],{"type":39,"tag":140,"props":2479,"children":2480},{},[2481],{"type":44,"value":2482},"Result retention",{"type":44,"value":2484}," — 24 hours; after that ",{"type":39,"tag":47,"props":2486,"children":2488},{"className":2487},[],[2489],{"type":44,"value":100},{"type":44,"value":2491}," returns\n",{"type":39,"tag":47,"props":2493,"children":2495},{"className":2494},[],[2496],{"type":44,"value":2497},"ResourceNotFoundException",{"type":44,"value":1072},{"type":39,"tag":226,"props":2500,"children":2501},{},[2502,2507,2509,2514],{"type":39,"tag":140,"props":2503,"children":2504},{},[2505],{"type":44,"value":2506},"Statement duration",{"type":44,"value":2508}," — 24 hours max. ",{"type":39,"tag":140,"props":2510,"children":2511},{},[2512],{"type":44,"value":2513},"Query string",{"type":44,"value":2515}," — 100 KB max.",{"type":39,"tag":226,"props":2517,"children":2518},{},[2519,2524,2526,2531,2533,2538,2540,2545,2547,2552,2554,2559,2561,2566,2567,2572,2573,2578,2579,2584,2585,2590,2591,2596,2598,2604],{"type":39,"tag":140,"props":2520,"children":2521},{},[2522],{"type":44,"value":2523},"API rate",{"type":44,"value":2525}," — fixed, non-adjustable TPS quotas per account\u002Fregion: ",{"type":39,"tag":47,"props":2527,"children":2529},{"className":2528},[],[2530],{"type":44,"value":92},{"type":44,"value":2532}," 100,\n",{"type":39,"tag":47,"props":2534,"children":2536},{"className":2535},[],[2537],{"type":44,"value":898},{"type":44,"value":2539}," 30, ",{"type":39,"tag":47,"props":2541,"children":2543},{"className":2542},[],[2544],{"type":44,"value":100},{"type":44,"value":2546}," 20, ",{"type":39,"tag":47,"props":2548,"children":2550},{"className":2549},[],[2551],{"type":44,"value":1185},{"type":44,"value":2553}," 20, and only ",{"type":39,"tag":140,"props":2555,"children":2556},{},[2557],{"type":44,"value":2558},"3 TPS",{"type":44,"value":2560}," for\n",{"type":39,"tag":47,"props":2562,"children":2564},{"className":2563},[],[2565],{"type":44,"value":1541},{"type":44,"value":858},{"type":39,"tag":47,"props":2568,"children":2570},{"className":2569},[],[2571],{"type":44,"value":1070},{"type":44,"value":858},{"type":39,"tag":47,"props":2574,"children":2576},{"className":2575},[],[2577],{"type":44,"value":1996},{"type":44,"value":858},{"type":39,"tag":47,"props":2580,"children":2582},{"className":2581},[],[2583],{"type":44,"value":2003},{"type":44,"value":858},{"type":39,"tag":47,"props":2586,"children":2588},{"className":2587},[],[2589],{"type":44,"value":2010},{"type":44,"value":858},{"type":39,"tag":47,"props":2592,"children":2594},{"className":2593},[],[2595],{"type":44,"value":2017},{"type":44,"value":2597},".\nExceeding one returns ",{"type":39,"tag":47,"props":2599,"children":2601},{"className":2600},[],[2602],{"type":44,"value":2603},"ThrottlingException",{"type":44,"value":2605}," (HTTP 400) — back off and don't poll in a hot loop.",{"type":39,"tag":112,"props":2607,"children":2609},{"id":2608},"error-handling",[2610],{"type":44,"value":2611},"Error handling",{"type":39,"tag":40,"props":2613,"children":2614},{},[2615,2617,2622,2624,2630],{"type":44,"value":2616},"Errors return as ",{"type":39,"tag":47,"props":2618,"children":2620},{"className":2619},[],[2621],{"type":44,"value":849},{"type":44,"value":2623}," (HTTP 400\u002F403\u002F500). The ",{"type":39,"tag":47,"props":2625,"children":2627},{"className":2626},[],[2628],{"type":44,"value":2629},"__type",{"type":44,"value":2631},"\nfield is the discriminator.",{"type":39,"tag":222,"props":2633,"children":2634},{},[2635,2671,2700,2722,2751,2765,2787,2808,2853,2896],{"type":39,"tag":226,"props":2636,"children":2637},{},[2638,2649,2651,2656,2657,2662,2664,2669],{"type":39,"tag":140,"props":2639,"children":2640},{},[2641,2647],{"type":39,"tag":47,"props":2642,"children":2644},{"className":2643},[],[2645],{"type":44,"value":2646},"ValidationException",{"type":44,"value":2648}," (400)",{"type":44,"value":2650}," — Bad parameters. Common: passing both ",{"type":39,"tag":47,"props":2652,"children":2654},{"className":2653},[],[2655],{"type":44,"value":258},{"type":44,"value":70},{"type":39,"tag":47,"props":2658,"children":2660},{"className":2659},[],[2661],{"type":44,"value":241},{"type":44,"value":2663},", or neither; missing ",{"type":39,"tag":47,"props":2665,"children":2667},{"className":2666},[],[2668],{"type":44,"value":18},{"type":44,"value":2670},"; wrong field casing.",{"type":39,"tag":226,"props":2672,"children":2673},{},[2674,2683,2685,2690,2692,2698],{"type":39,"tag":140,"props":2675,"children":2676},{},[2677,2682],{"type":39,"tag":47,"props":2678,"children":2680},{"className":2679},[],[2681],{"type":44,"value":2448},{"type":44,"value":2648},{"type":44,"value":2684}," — Too many in flight. ",{"type":39,"tag":47,"props":2686,"children":2688},{"className":2687},[],[2689],{"type":44,"value":1070},{"type":44,"value":2691}," ",{"type":39,"tag":47,"props":2693,"children":2695},{"className":2694},[],[2696],{"type":44,"value":2697},"{\"Status\":\"STARTED\"}",{"type":44,"value":2699}," shows what's running.",{"type":39,"tag":226,"props":2701,"children":2702},{},[2703,2713,2715,2720],{"type":39,"tag":140,"props":2704,"children":2705},{},[2706,2712],{"type":39,"tag":47,"props":2707,"children":2709},{"className":2708},[],[2710],{"type":44,"value":2711},"ActiveSessionsExceededException",{"type":44,"value":2648},{"type":44,"value":2714}," — >500 open sessions. Stop passing ",{"type":39,"tag":47,"props":2716,"children":2718},{"className":2717},[],[2719],{"type":44,"value":1193},{"type":44,"value":2721}," or wait for idle ones to expire.",{"type":39,"tag":226,"props":2723,"children":2724},{},[2725,2736,2738,2743,2745,2750],{"type":39,"tag":140,"props":2726,"children":2727},{},[2728,2734],{"type":39,"tag":47,"props":2729,"children":2731},{"className":2730},[],[2732],{"type":44,"value":2733},"ExecuteStatementException",{"type":44,"value":2735}," (500)",{"type":44,"value":2737}," — Submission failed before the DB saw it — wrong cluster\u002Fworkgroup name, unreachable cluster, bad ",{"type":39,"tag":47,"props":2739,"children":2741},{"className":2740},[],[2742],{"type":44,"value":265},{"type":44,"value":2744},". Check ",{"type":39,"tag":47,"props":2746,"children":2748},{"className":2747},[],[2749],{"type":44,"value":218},{"type":44,"value":1072},{"type":39,"tag":226,"props":2752,"children":2753},{},[2754,2763],{"type":39,"tag":140,"props":2755,"children":2756},{},[2757,2762],{"type":39,"tag":47,"props":2758,"children":2760},{"className":2759},[],[2761],{"type":44,"value":2497},{"type":44,"value":2648},{"type":44,"value":2764}," — Statement ID unknown or > 24 h old.",{"type":39,"tag":226,"props":2766,"children":2767},{},[2768,2778,2780,2786],{"type":39,"tag":140,"props":2769,"children":2770},{},[2771,2777],{"type":39,"tag":47,"props":2772,"children":2774},{"className":2773},[],[2775],{"type":44,"value":2776},"BatchExecuteStatementException",{"type":44,"value":2735},{"type":44,"value":2779}," — One statement in the batch failed; whole transaction rolled back. Check ",{"type":39,"tag":47,"props":2781,"children":2783},{"className":2782},[],[2784],{"type":44,"value":2785},"SubStatements[].Error",{"type":44,"value":1072},{"type":39,"tag":226,"props":2788,"children":2789},{},[2790,2806],{"type":39,"tag":140,"props":2791,"children":2792},{},[2793,2799,2800],{"type":39,"tag":47,"props":2794,"children":2796},{"className":2795},[],[2797],{"type":44,"value":2798},"DatabaseConnectionException",{"type":44,"value":1006},{"type":39,"tag":47,"props":2801,"children":2803},{"className":2802},[],[2804],{"type":44,"value":2805},"QueryTimeoutException",{"type":44,"value":2807}," — A catalog call couldn't reach the database or timed out. Check the target is up; retry.",{"type":39,"tag":226,"props":2809,"children":2810},{},[2811,2821,2823,2829,2831,2837,2838,2844,2845,2851],{"type":39,"tag":140,"props":2812,"children":2813},{},[2814,2819],{"type":39,"tag":47,"props":2815,"children":2817},{"className":2816},[],[2818],{"type":44,"value":128},{"type":44,"value":2820}," (403)",{"type":44,"value":2822}," — Credential needs ",{"type":39,"tag":47,"props":2824,"children":2826},{"className":2825},[],[2827],{"type":44,"value":2828},"redshift-data:*",{"type":44,"value":2830}," on the cluster\u002Fworkgroup ARN plus, depending on connection mode, ",{"type":39,"tag":47,"props":2832,"children":2834},{"className":2833},[],[2835],{"type":44,"value":2836},"redshift:GetClusterCredentials",{"type":44,"value":1006},{"type":39,"tag":47,"props":2839,"children":2841},{"className":2840},[],[2842],{"type":44,"value":2843},"redshift-serverless:GetCredentials",{"type":44,"value":1006},{"type":39,"tag":47,"props":2846,"children":2848},{"className":2847},[],[2849],{"type":44,"value":2850},"secretsmanager:GetSecretValue",{"type":44,"value":2852},". Report which is missing.",{"type":39,"tag":226,"props":2854,"children":2855},{},[2856,2866,2867,2872,2874,2879,2881,2887,2889,2894],{"type":39,"tag":140,"props":2857,"children":2858},{},[2859,2865],{"type":39,"tag":47,"props":2860,"children":2862},{"className":2861},[],[2863],{"type":44,"value":2864},"InternalServerException",{"type":44,"value":2735},{"type":44,"value":1946},{"type":39,"tag":47,"props":2868,"children":2870},{"className":2869},[],[2871],{"type":44,"value":898},{"type":44,"value":2873}," is ",{"type":39,"tag":140,"props":2875,"children":2876},{},[2877],{"type":44,"value":2878},"not idempotent",{"type":44,"value":2880}," unless you pass a ",{"type":39,"tag":47,"props":2882,"children":2884},{"className":2883},[],[2885],{"type":44,"value":2886},"ClientToken",{"type":44,"value":2888}," — check ",{"type":39,"tag":47,"props":2890,"children":2892},{"className":2891},[],[2893],{"type":44,"value":1070},{"type":44,"value":2895}," before retrying a write.",{"type":39,"tag":226,"props":2897,"children":2898},{},[2899,2915,2917,2922],{"type":39,"tag":140,"props":2900,"children":2901},{},[2902,2908,2910],{"type":39,"tag":47,"props":2903,"children":2905},{"className":2904},[],[2906],{"type":44,"value":2907},"Status: FAILED",{"type":44,"value":2909}," on ",{"type":39,"tag":47,"props":2911,"children":2913},{"className":2912},[],[2914],{"type":44,"value":92},{"type":44,"value":2916}," — SQL failed after submission. Read ",{"type":39,"tag":47,"props":2918,"children":2920},{"className":2919},[],[2921],{"type":44,"value":1485},{"type":44,"value":2923}," for the SQL message.",{"type":39,"tag":40,"props":2925,"children":2926},{},[2927],{"type":44,"value":2928},"Two gotchas:",{"type":39,"tag":222,"props":2930,"children":2931},{},[2932,2960],{"type":39,"tag":226,"props":2933,"children":2934},{},[2935,2945,2947,2952,2953,2958],{"type":39,"tag":140,"props":2936,"children":2937},{},[2938,2943],{"type":39,"tag":47,"props":2939,"children":2941},{"className":2940},[],[2942],{"type":44,"value":898},{"type":44,"value":2944}," returning 200 ≠ the query succeeded.",{"type":44,"value":2946}," SQL errors only surface later as\n",{"type":39,"tag":47,"props":2948,"children":2950},{"className":2949},[],[2951],{"type":44,"value":2907},{"type":44,"value":2909},{"type":39,"tag":47,"props":2954,"children":2956},{"className":2955},[],[2957],{"type":44,"value":92},{"type":44,"value":2959},". Always poll before fetching results.",{"type":39,"tag":226,"props":2961,"children":2962},{},[2963,2968,2970,2976,2978,2984,2986,2992,2994,3000,3002,3007,3008,3013,3015,3021],{"type":39,"tag":140,"props":2964,"children":2965},{},[2966],{"type":44,"value":2967},"Cell values are typed one-key objects",{"type":44,"value":2969},", not bare values. ",{"type":39,"tag":47,"props":2971,"children":2973},{"className":2972},[],[2974],{"type":44,"value":2975},"longValue",{"type":44,"value":2977}," is a JSON number,\n",{"type":39,"tag":47,"props":2979,"children":2981},{"className":2980},[],[2982],{"type":44,"value":2983},"isNull: true",{"type":44,"value":2985}," is a distinct shape. A naive ",{"type":39,"tag":47,"props":2987,"children":2989},{"className":2988},[],[2990],{"type":44,"value":2991},".value",{"type":44,"value":2993}," read returns nothing, and chaining jq ",{"type":39,"tag":47,"props":2995,"children":2997},{"className":2996},[],[2998],{"type":44,"value":2999},"\u002F\u002F",{"type":44,"value":3001},"\nacross the typed keys breaks on ",{"type":39,"tag":47,"props":3003,"children":3005},{"className":3004},[],[3006],{"type":44,"value":1982},{"type":44,"value":1127},{"type":39,"tag":47,"props":3009,"children":3011},{"className":3010},[],[3012],{"type":44,"value":1089},{"type":44,"value":3014},". Use ",{"type":39,"tag":47,"props":3016,"children":3018},{"className":3017},[],[3019],{"type":44,"value":3020},"to_entries[0].value",{"type":44,"value":1072},{"type":39,"tag":112,"props":3023,"children":3025},{"id":3024},"going-deeper",[3026],{"type":44,"value":3027},"Going deeper",{"type":39,"tag":40,"props":3029,"children":3030},{},[3031,3036,3038,3044,3046,3052,3054,3060,3062,3067,3068,3073],{"type":39,"tag":47,"props":3032,"children":3034},{"className":3033},[],[3035],{"type":44,"value":1177},{"type":44,"value":3037}," has the complete catalog — every action's request\u002Fresponse shape in PascalCase\nfor raw HTTP, the ",{"type":39,"tag":47,"props":3039,"children":3041},{"className":3040},[],[3042],{"type":44,"value":3043},"SqlParameter",{"type":44,"value":3045}," binding format, the ",{"type":39,"tag":47,"props":3047,"children":3049},{"className":3048},[],[3050],{"type":44,"value":3051},"ColumnMetadata",{"type":44,"value":3053}," fields, ",{"type":39,"tag":47,"props":3055,"children":3057},{"className":3056},[],[3058],{"type":44,"value":3059},"SubStatementData",{"type":44,"value":3061}," for\nbatches, session reuse (",{"type":39,"tag":47,"props":3063,"children":3065},{"className":3064},[],[3066],{"type":44,"value":1193},{"type":44,"value":1006},{"type":39,"tag":47,"props":3069,"children":3071},{"className":3070},[],[3072],{"type":44,"value":1200},{"type":44,"value":3074},"), and the quota table. Read it when\nyou need an action not covered above or the exact raw-HTTP body shape.",{"type":39,"tag":3076,"props":3077,"children":3078},"style",{},[3079],{"type":44,"value":3080},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3082,"total":3269},[3083,3104,3118,3130,3149,3162,3183,3203,3217,3232,3240,3253],{"slug":3084,"name":3084,"fn":3085,"description":3086,"org":3087,"tags":3088,"stars":3101,"repoUrl":3102,"updatedAt":3103},"algorithmic-art","create algorithmic art with p5.js","Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3089,3092,3095,3098],{"name":3090,"slug":3091,"type":16},"Creative","creative",{"name":3093,"slug":3094,"type":16},"Design","design",{"name":3096,"slug":3097,"type":16},"Generative Art","generative-art",{"name":3099,"slug":3100,"type":16},"JavaScript","javascript",161831,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fskills","2026-04-06T17:56:15.455818",{"slug":3105,"name":3105,"fn":3106,"description":3107,"org":3108,"tags":3109,"stars":3101,"repoUrl":3102,"updatedAt":3117},"brand-guidelines","apply Anthropic brand colors and typography","Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3110,3113,3114],{"name":3111,"slug":3112,"type":16},"Branding","branding",{"name":3093,"slug":3094,"type":16},{"name":3115,"slug":3116,"type":16},"Typography","typography","2026-04-06T17:56:05.042852",{"slug":3119,"name":3119,"fn":3120,"description":3121,"org":3122,"tags":3123,"stars":3101,"repoUrl":3102,"updatedAt":3129},"canvas-design","create posters and visual art as PNG or PDF","Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3124,3125,3126],{"name":3090,"slug":3091,"type":16},{"name":3093,"slug":3094,"type":16},{"name":3127,"slug":3128,"type":16},"PDF","pdf","2026-04-06T17:56:03.794732",{"slug":3131,"name":3131,"fn":3132,"description":3133,"org":3134,"tags":3135,"stars":3101,"repoUrl":3102,"updatedAt":3148},"claude-api","build apps with the Claude API","Reference for the Claude API \u002F Anthropic SDK — model ids, pricing, params, streaming, tool use, MCP, agents, caching, token counting, model migration.\nTRIGGER — read BEFORE opening the target file; don't skip because it \"looks like a one-liner\" — whenever: the prompt names Claude\u002FAnthropic in any form (Claude, Anthropic, Fable, Opus, Sonnet, Haiku, `anthropic`, `@anthropic-ai`, `claude-*`, `us.anthropic.*`, `[1m]`); the user asks about an LLM (pricing\u002Fmodel choice\u002Flimits\u002Fcaching) — never answer from memory; OR the task is LLM-shaped with provider unstated (agent\u002FMCP\u002Ftool-definition\u002Fmulti-agent\u002FRAG\u002FLLM-judge\u002Fcomputer-use; generate\u002Fsummarize\u002Fextract\u002Fclassify\u002Frewrite\u002Fconverse over NL; debugging refusals\u002Fcutoffs\u002Fstreaming\u002Ftool-calls\u002Ftokens).\nSKIP only when another provider is being worked on (overrides all triggers): OpenAI\u002FGPT\u002FGemini\u002FLlama\u002FMistral\u002FCohere\u002FOllama named in the query; OR `grep -rE 'openai|langchain_openai|google.generativeai|genai|mistralai|cohere|ollama'` over the project hits (run this grep FIRST if no provider named — don't Read the file).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3136,3139,3140,3143,3145],{"name":3137,"slug":3138,"type":16},"Agents","agents",{"name":9,"slug":8,"type":16},{"name":3141,"slug":3142,"type":16},"Anthropic SDK","anthropic-sdk",{"name":3144,"slug":3131,"type":16},"Claude API",{"name":3146,"slug":3147,"type":16},"LLM","llm","2026-07-28T05:36:08.213335",{"slug":3150,"name":3150,"fn":3151,"description":3152,"org":3153,"tags":3154,"stars":3101,"repoUrl":3102,"updatedAt":3161},"doc-coauthoring","co-author documentation and technical specs","Guide users through a structured workflow for co-authoring documentation. Use when user wants to write documentation, proposals, technical specs, decision docs, or similar structured content. This workflow helps users efficiently transfer context, refine content through iteration, and verify the doc works for readers. Trigger when user mentions writing docs, creating proposals, drafting specs, or similar documentation tasks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3155,3158],{"name":3156,"slug":3157,"type":16},"Documentation","documentation",{"name":3159,"slug":3160,"type":16},"Technical Writing","technical-writing","2026-04-06T17:56:14.18897",{"slug":3163,"name":3163,"fn":3164,"description":3165,"org":3166,"tags":3167,"stars":3101,"repoUrl":3102,"updatedAt":3182},"docx","create and edit Word documents","Use this skill whenever the user wants to create, read, edit, or manipulate Word documents (.docx files) or Word templates (.dotx files). Triggers include: any mention of 'Word doc', 'word document', '.docx', '.dotx', or requests to produce professional documents with formatting like tables of contents, headings, page numbers, or letterheads. Also use when extracting or reorganizing content from .docx or .dotx files, inserting or replacing images in documents, performing find-and-replace in Word files, working with tracked changes or comments, or converting content into a polished Word document. If the user asks for a 'report', 'memo', 'letter', 'template', or similar deliverable as a Word or .docx file, use this skill. Do NOT use for PDFs, spreadsheets, Google Docs, or general coding tasks unrelated to document generation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3168,3171,3173,3176,3179],{"name":3169,"slug":3170,"type":16},"Documents","documents",{"name":3172,"slug":3163,"type":16},"DOCX",{"name":3174,"slug":3175,"type":16},"Office","office",{"name":3177,"slug":3178,"type":16},"Templates","templates",{"name":3180,"slug":3181,"type":16},"Word","word","2026-07-18T05:16:23.136271",{"slug":3184,"name":3184,"fn":3185,"description":3186,"org":3187,"tags":3188,"stars":3101,"repoUrl":3102,"updatedAt":3202},"frontend-design","design production-grade frontend interfaces","Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3189,3190,3193,3196,3199],{"name":3093,"slug":3094,"type":16},{"name":3191,"slug":3192,"type":16},"Frontend","frontend",{"name":3194,"slug":3195,"type":16},"React","react",{"name":3197,"slug":3198,"type":16},"Tailwind CSS","tailwind-css",{"name":3200,"slug":3201,"type":16},"UI Components","ui-components","2026-04-06T17:56:16.723469",{"slug":3204,"name":3204,"fn":3205,"description":3206,"org":3207,"tags":3208,"stars":3101,"repoUrl":3102,"updatedAt":3216},"internal-comms","write internal company communications","A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3209,3212,3213],{"name":3210,"slug":3211,"type":16},"Communications","communications",{"name":3177,"slug":3178,"type":16},{"name":3214,"slug":3215,"type":16},"Writing","writing","2026-04-06T17:56:20.695522",{"slug":3218,"name":3218,"fn":3219,"description":3220,"org":3221,"tags":3222,"stars":3101,"repoUrl":3102,"updatedAt":3231},"mcp-builder","build MCP servers","Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node\u002FTypeScript (MCP SDK).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3223,3224,3227,3228],{"name":3137,"slug":3138,"type":16},{"name":3225,"slug":3226,"type":16},"API Development","api-development",{"name":3146,"slug":3147,"type":16},{"name":3229,"slug":3230,"type":16},"MCP","mcp","2026-04-06T17:56:10.357665",{"slug":3128,"name":3128,"fn":3233,"description":3234,"org":3235,"tags":3236,"stars":3101,"repoUrl":3102,"updatedAt":3239},"read edit and manipulate PDF files","Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text\u002Ftables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting\u002Fdecrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3237,3238],{"name":3169,"slug":3170,"type":16},{"name":3127,"slug":3128,"type":16},"2026-04-06T17:56:02.483316",{"slug":3241,"name":3241,"fn":3242,"description":3243,"org":3244,"tags":3245,"stars":3101,"repoUrl":3102,"updatedAt":3252},"pptx","create and edit PowerPoint presentations","Use this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an email or summary); editing, modifying, or updating existing presentations; combining or splitting slide files; working with templates (.potx), layouts, speaker notes, or comments. Trigger whenever the user mentions \"deck,\" \"slides,\" \"presentation,\" or references a .pptx or .potx filename, regardless of what they plan to do with the content afterward. If a .pptx or .potx file needs to be opened, created, or touched, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3246,3249],{"name":3247,"slug":3248,"type":16},"PowerPoint","powerpoint",{"name":3250,"slug":3251,"type":16},"Presentations","presentations","2026-07-18T05:16:24.1471",{"slug":3254,"name":3254,"fn":3255,"description":3256,"org":3257,"tags":3258,"stars":3101,"repoUrl":3102,"updatedAt":3268},"skill-creator","create and optimize agent skills","Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3259,3260,3261,3264,3267],{"name":3137,"slug":3138,"type":16},{"name":3156,"slug":3157,"type":16},{"name":3262,"slug":3263,"type":16},"Evals","evals",{"name":3265,"slug":3266,"type":16},"Performance","performance",{"name":3159,"slug":3160,"type":16},"2026-04-19T06:45:40.804",490,{"items":3271,"total":3374},[3272,3288,3301,3316,3330,3347,3361],{"slug":3273,"name":3273,"fn":3274,"description":3275,"org":3276,"tags":3277,"stars":23,"repoUrl":24,"updatedAt":3287},"asana-api","manage Asana tasks and projects","Read and manage Asana tasks, projects, sections, comments, and workspaces. Use this whenever the user wants to list or search tasks, create or update a task, complete a task, comment on a task, move tasks between projects or sections, look up a project or workspace, or ask \"what's on my Asana list\" — even if they don't say \"API\". Also use it for any app.asana.com URL or an Asana task\u002Fproject gid. Always start from this skill when interacting with this service — its bundled scripts and recipes are the fastest path.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3278,3281,3284],{"name":3279,"slug":3280,"type":16},"Productivity","productivity",{"name":3282,"slug":3283,"type":16},"Project Management","project-management",{"name":3285,"slug":3286,"type":16},"Task Management","task-management","2026-06-24T07:44:51.70496",{"slug":3289,"name":3289,"fn":3290,"description":3291,"org":3292,"tags":3293,"stars":23,"repoUrl":24,"updatedAt":3300},"bigquery-api","run SQL queries against BigQuery","Run SQL against Google BigQuery and browse its catalog — submit queries (sync or async), poll job status, page through results, list datasets\u002Ftables, and read table schemas. Use this whenever the user wants to query a BigQuery table, ask \"what's in this dataset\", check a BigQuery job's status, or mentions bigquery.googleapis.com or a `project.dataset.table` path. Always start from this skill when interacting with this service — its bundled scripts and recipes are the fastest path.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3294,3295,3296,3299],{"name":14,"slug":15,"type":16},{"name":18,"slug":19,"type":16},{"name":3297,"slug":3298,"type":16},"Google Cloud","google-cloud",{"name":21,"slug":22,"type":16},"2026-06-24T07:45:14.797877",{"slug":3302,"name":3302,"fn":3303,"description":3304,"org":3305,"tags":3306,"stars":23,"repoUrl":24,"updatedAt":3315},"config-guide","configure Claude agent settings and scopes","Reference guide for configuring @Claude agents — agents, agent scopes, identity profiles, presets, connections, rules, GitHub repositories, and custom instructions. Explains the inheritance model and configuration best practices.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3307,3308,3309,3312],{"name":3137,"slug":3138,"type":16},{"name":3144,"slug":3131,"type":16},{"name":3310,"slug":3311,"type":16},"Configuration","configuration",{"name":3313,"slug":3314,"type":16},"GitHub","github","2026-06-25T07:41:36.617524",{"slug":3317,"name":3317,"fn":3318,"description":3319,"org":3320,"tags":3321,"stars":23,"repoUrl":24,"updatedAt":3329},"confluence-api","manage Confluence Cloud content","Read, search, and manage Confluence Cloud pages, spaces, blog posts, comments, attachments, and labels. Use this whenever the user wants to find a page, read a doc, search the wiki with CQL, create or update a page, add a comment, list pages in a space, pull an attachment, or ask \"what does the wiki say about X\" — even if they don't say \"API\". Also use it for any *.atlassian.net\u002Fwiki URL, or a CQL string when the context is wiki content rather than tickets. Always start from this skill when interacting with this service — its bundled scripts and recipes are the fastest path.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3322,3325,3326],{"name":3323,"slug":3324,"type":16},"Confluence","confluence",{"name":3156,"slug":3157,"type":16},{"name":3327,"slug":3328,"type":16},"Knowledge Management","knowledge-management","2026-06-25T07:41:43.531982",{"slug":3331,"name":3331,"fn":3332,"description":3333,"org":3334,"tags":3335,"stars":23,"repoUrl":24,"updatedAt":3346},"datadog-api","manage Datadog monitoring and telemetry","Query and manage Datadog monitoring data — logs, metrics, monitors, dashboards, events, SLOs, traces, and incidents. Use this whenever the user wants to search logs, look at a metric, check which monitors are alerting, investigate a trace, pull SLO status, mute an alert, or ask \"what's happening in Datadog\" — even if they don't say \"API\". Also use it for any URL under *.datadoghq.com. Always start from this skill when interacting with this service — its bundled scripts and recipes are the fastest path.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3336,3337,3340,3343],{"name":3225,"slug":3226,"type":16},{"name":3338,"slug":3339,"type":16},"Datadog","datadog",{"name":3341,"slug":3342,"type":16},"Monitoring","monitoring",{"name":3344,"slug":3345,"type":16},"Observability","observability","2026-06-24T07:46:42.266372",{"slug":3348,"name":3348,"fn":3349,"description":3350,"org":3351,"tags":3352,"stars":23,"repoUrl":24,"updatedAt":3360},"debug-plugins","diagnose Claude plugin loading failures","Diagnose why a plugin or skill configured in @Claude admin settings isn't loading. Checks mount directories, the Claude Code launch command, and startup logs from inside the running container, then explains what failed and how to fix it.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3353,3354,3357],{"name":3144,"slug":3131,"type":16},{"name":3355,"slug":3356,"type":16},"Debugging","debugging",{"name":3358,"slug":3359,"type":16},"Plugin Development","plugin-development","2026-06-24T07:46:32.792809",{"slug":3362,"name":3362,"fn":3363,"description":3364,"org":3365,"tags":3366,"stars":23,"repoUrl":24,"updatedAt":3373},"enterprise-search","search company enterprise knowledge index","Search the company's enterprise knowledge index. Use this FIRST when starting any task that touches company-specific context - projects, people, policies, internal docs, prior decisions - before searching individual sources like Drive, Slack, or Jira directly. Also use it when the user asks \"do we have a doc about X\", \"what's our policy on Y\", or references internal initiatives by name. Always start from this skill when interacting with this service — its bundled scripts and recipes are the fastest path.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3367,3369,3370],{"name":3368,"slug":3362,"type":16},"Enterprise Search",{"name":3327,"slug":3328,"type":16},{"name":3371,"slug":3372,"type":16},"Research","research","2026-06-24T07:46:40.641837",18]