{"id":"3f8d85f3-2a60-453d-8d46-f03e169b14ae","shortId":"S6HwBn","kind":"skill","title":"azure-data-tables-java","tagline":"Build table storage applications using the Azure Tables SDK for Java. Works with both Azure Table Storage and Cosmos DB Table API.","description":"# Azure Tables SDK for Java\n\nBuild table storage applications using the Azure Tables SDK for Java. Works with both Azure Table Storage and Cosmos DB Table API.\n\n## Installation\n\n```xml\n<dependency>\n  <groupId>com.azure</groupId>\n  <artifactId>azure-data-tables</artifactId>\n  <version>12.6.0-beta.1</version>\n</dependency>\n```\n\n## Client Creation\n\n### With Connection String\n\n```java\nimport com.azure.data.tables.TableServiceClient;\nimport com.azure.data.tables.TableServiceClientBuilder;\nimport com.azure.data.tables.TableClient;\n\nTableServiceClient serviceClient = new TableServiceClientBuilder()\n    .connectionString(\"<your-connection-string>\")\n    .buildClient();\n```\n\n### With Shared Key\n\n```java\nimport com.azure.core.credential.AzureNamedKeyCredential;\n\nAzureNamedKeyCredential credential = new AzureNamedKeyCredential(\n    \"<account-name>\",\n    \"<account-key>\");\n\nTableServiceClient serviceClient = new TableServiceClientBuilder()\n    .endpoint(\"<your-table-account-url>\")\n    .credential(credential)\n    .buildClient();\n```\n\n### With SAS Token\n\n```java\nTableServiceClient serviceClient = new TableServiceClientBuilder()\n    .endpoint(\"<your-table-account-url>\")\n    .sasToken(\"<sas-token>\")\n    .buildClient();\n```\n\n### With DefaultAzureCredential (Storage only)\n\n```java\nimport com.azure.identity.DefaultAzureCredentialBuilder;\n\nTableServiceClient serviceClient = new TableServiceClientBuilder()\n    .endpoint(\"<your-table-account-url>\")\n    .credential(new DefaultAzureCredentialBuilder().build())\n    .buildClient();\n```\n\n## Key Concepts\n\n- **TableServiceClient**: Manage tables (create, list, delete)\n- **TableClient**: Manage entities within a table (CRUD)\n- **Partition Key**: Groups entities for efficient queries\n- **Row Key**: Unique identifier within a partition\n- **Entity**: A row with up to 252 properties (1MB Storage, 2MB Cosmos)\n\n## Core Patterns\n\n### Create Table\n\n```java\n// Create table (throws if exists)\nTableClient tableClient = serviceClient.createTable(\"mytable\");\n\n// Create if not exists (no exception)\nTableClient tableClient = serviceClient.createTableIfNotExists(\"mytable\");\n```\n\n### Get Table Client\n\n```java\n// From service client\nTableClient tableClient = serviceClient.getTableClient(\"mytable\");\n\n// Direct construction\nTableClient tableClient = new TableClientBuilder()\n    .connectionString(\"<connection-string>\")\n    .tableName(\"mytable\")\n    .buildClient();\n```\n\n### Create Entity\n\n```java\nimport com.azure.data.tables.models.TableEntity;\n\nTableEntity entity = new TableEntity(\"partitionKey\", \"rowKey\")\n    .addProperty(\"Name\", \"Product A\")\n    .addProperty(\"Price\", 29.99)\n    .addProperty(\"Quantity\", 100)\n    .addProperty(\"IsAvailable\", true);\n\ntableClient.createEntity(entity);\n```\n\n### Get Entity\n\n```java\nTableEntity entity = tableClient.getEntity(\"partitionKey\", \"rowKey\");\n\nString name = (String) entity.getProperty(\"Name\");\nDouble price = (Double) entity.getProperty(\"Price\");\nSystem.out.printf(\"Product: %s, Price: %.2f%n\", name, price);\n```\n\n### Update Entity\n\n```java\nimport com.azure.data.tables.models.TableEntityUpdateMode;\n\n// Merge (update only specified properties)\nTableEntity updateEntity = new TableEntity(\"partitionKey\", \"rowKey\")\n    .addProperty(\"Price\", 24.99);\ntableClient.updateEntity(updateEntity, TableEntityUpdateMode.MERGE);\n\n// Replace (replace entire entity)\nTableEntity replaceEntity = new TableEntity(\"partitionKey\", \"rowKey\")\n    .addProperty(\"Name\", \"Product A Updated\")\n    .addProperty(\"Price\", 24.99)\n    .addProperty(\"Quantity\", 150);\ntableClient.updateEntity(replaceEntity, TableEntityUpdateMode.REPLACE);\n```\n\n### Upsert Entity\n\n```java\n// Insert or update (merge mode)\ntableClient.upsertEntity(entity, TableEntityUpdateMode.MERGE);\n\n// Insert or replace\ntableClient.upsertEntity(entity, TableEntityUpdateMode.REPLACE);\n```\n\n### Delete Entity\n\n```java\ntableClient.deleteEntity(\"partitionKey\", \"rowKey\");\n```\n\n### List Entities\n\n```java\nimport com.azure.data.tables.models.ListEntitiesOptions;\n\n// List all entities\nfor (TableEntity entity : tableClient.listEntities()) {\n    System.out.printf(\"%s - %s%n\",\n        entity.getPartitionKey(),\n        entity.getRowKey());\n}\n\n// With filtering and selection\nListEntitiesOptions options = new ListEntitiesOptions()\n    .setFilter(\"PartitionKey eq 'sales'\")\n    .setSelect(\"Name\", \"Price\");\n\nfor (TableEntity entity : tableClient.listEntities(options, null, null)) {\n    System.out.printf(\"%s: %.2f%n\",\n        entity.getProperty(\"Name\"),\n        entity.getProperty(\"Price\"));\n}\n```\n\n### Query with OData Filter\n\n```java\n// Filter by partition key\nListEntitiesOptions options = new ListEntitiesOptions()\n    .setFilter(\"PartitionKey eq 'electronics'\");\n\n// Filter with multiple conditions\noptions.setFilter(\"PartitionKey eq 'electronics' and Price gt 100\");\n\n// Filter with comparison operators\noptions.setFilter(\"Quantity ge 10 and Quantity le 100\");\n\n// Top N results\noptions.setTop(10);\n\nfor (TableEntity entity : tableClient.listEntities(options, null, null)) {\n    System.out.println(entity.getRowKey());\n}\n```\n\n### Batch Operations (Transactions)\n\n```java\nimport com.azure.data.tables.models.TableTransactionAction;\nimport com.azure.data.tables.models.TableTransactionActionType;\nimport java.util.Arrays;\n\n// All entities must have same partition key\nList<TableTransactionAction> actions = Arrays.asList(\n    new TableTransactionAction(\n        TableTransactionActionType.CREATE,\n        new TableEntity(\"batch\", \"row1\").addProperty(\"Name\", \"Item 1\")),\n    new TableTransactionAction(\n        TableTransactionActionType.CREATE,\n        new TableEntity(\"batch\", \"row2\").addProperty(\"Name\", \"Item 2\")),\n    new TableTransactionAction(\n        TableTransactionActionType.UPSERT_MERGE,\n        new TableEntity(\"batch\", \"row3\").addProperty(\"Name\", \"Item 3\"))\n);\n\ntableClient.submitTransaction(actions);\n```\n\n### List Tables\n\n```java\nimport com.azure.data.tables.models.TableItem;\nimport com.azure.data.tables.models.ListTablesOptions;\n\n// List all tables\nfor (TableItem table : serviceClient.listTables()) {\n    System.out.println(table.getName());\n}\n\n// Filter tables\nListTablesOptions options = new ListTablesOptions()\n    .setFilter(\"TableName eq 'mytable'\");\n\nfor (TableItem table : serviceClient.listTables(options, null, null)) {\n    System.out.println(table.getName());\n}\n```\n\n### Delete Table\n\n```java\nserviceClient.deleteTable(\"mytable\");\n```\n\n## Typed Entities\n\n```java\npublic class Product implements TableEntity {\n    private String partitionKey;\n    private String rowKey;\n    private OffsetDateTime timestamp;\n    private String eTag;\n    private String name;\n    private double price;\n    \n    // Getters and setters for all fields\n    @Override\n    public String getPartitionKey() { return partitionKey; }\n    @Override\n    public void setPartitionKey(String partitionKey) { this.partitionKey = partitionKey; }\n    @Override\n    public String getRowKey() { return rowKey; }\n    @Override\n    public void setRowKey(String rowKey) { this.rowKey = rowKey; }\n    // ... other getters/setters\n    \n    public String getName() { return name; }\n    public void setName(String name) { this.name = name; }\n    public double getPrice() { return price; }\n    public void setPrice(double price) { this.price = price; }\n}\n\n// Usage\nProduct product = new Product();\nproduct.setPartitionKey(\"electronics\");\nproduct.setRowKey(\"laptop-001\");\nproduct.setName(\"Laptop\");\nproduct.setPrice(999.99);\n\ntableClient.createEntity(product);\n```\n\n## Error Handling\n\n```java\nimport com.azure.data.tables.models.TableServiceException;\n\ntry {\n    tableClient.createEntity(entity);\n} catch (TableServiceException e) {\n    System.out.println(\"Status: \" + e.getResponse().getStatusCode());\n    System.out.println(\"Error: \" + e.getMessage());\n    // 409 = Conflict (entity exists)\n    // 404 = Not Found\n}\n```\n\n## Environment Variables\n\n```bash\n# Storage Account\nAZURE_TABLES_CONNECTION_STRING=DefaultEndpointsProtocol=https;AccountName=...\nAZURE_TABLES_ENDPOINT=https://<account>.table.core.windows.net\n\n# Cosmos DB Table API\nCOSMOS_TABLE_ENDPOINT=https://<account>.table.cosmosdb.azure.com\n```\n\n## Best Practices\n\n1. **Partition Key Design**: Choose keys that distribute load evenly\n2. **Batch Operations**: Use transactions for atomic multi-entity updates\n3. **Query Optimization**: Always filter by PartitionKey when possible\n4. **Select Projection**: Only select needed properties for performance\n5. **Entity Size**: Keep entities under 1MB (Storage) or 2MB (Cosmos)\n\n## Trigger Phrases\n\n- \"Azure Tables Java\"\n- \"table storage SDK\"\n- \"Cosmos DB Table API\"\n- \"NoSQL key-value storage\"\n- \"partition key row key\"\n- \"table entity CRUD\"\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["azure","data","tables","java","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents"],"capabilities":["skill","source-sickn33","skill-azure-data-tables-java","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-data-tables-java","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34928 github stars · SKILL.md body (9,074 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T18:50:30.082Z","embedding":null,"createdAt":"2026-04-18T21:32:20.890Z","updatedAt":"2026-04-24T18:50:30.082Z","lastSeenAt":"2026-04-24T18:50:30.082Z","tsv":"'-001':629 '1':468,687 '10':419,428 '100':234,411,423 '12.6.0':62 '150':308 '1mb':165,732 '2':479,697 '24.99':284,305 '252':163 '29.99':231 '2f':262,377 '2mb':167,735 '3':491,708 '4':717 '404':658 '409':654 '5':726 '999.99':633 'account':665 'accountnam':672 'action':456,493,773 'addproperti':225,229,232,235,282,298,303,306,465,476,488 'alway':711 'api':27,54,680,748 'applic':9,36,767 'arrays.aslist':457 'ask':811 'atom':703 'azur':2,12,20,28,39,47,59,666,673,739 'azure-data-t':58 'azure-data-tables-java':1 'azurenamedkeycredenti':88,91 'bash':663 'batch':438,463,474,486,698 'best':685 'beta.1':63 'boundari':819 'build':6,33,126 'buildclient':81,99,110,127,213 'catch':644 'choos':691 'clarif':813 'class':538 'clear':786 'client':64,195,199 'com.azure':57 'com.azure.core.credential.azurenamedkeycredential':87 'com.azure.data.tables.models.listentitiesoptions':339 'com.azure.data.tables.models.listtablesoptions':500 'com.azure.data.tables.models.tableentity':218 'com.azure.data.tables.models.tableentityupdatemode':270 'com.azure.data.tables.models.tableitem':498 'com.azure.data.tables.models.tableserviceexception':640 'com.azure.data.tables.models.tabletransactionaction':443 'com.azure.data.tables.models.tabletransactionactiontype':445 'com.azure.data.tables.tableclient':75 'com.azure.data.tables.tableserviceclient':71 'com.azure.data.tables.tableserviceclientbuilder':73 'com.azure.identity.defaultazurecredentialbuilder':117 'comparison':414 'concept':129 'condit':403 'conflict':655 'connect':67,668 'connectionstr':80,210 'construct':205 'core':169 'cosmos':24,51,168,677,681,736,745 'creat':133,171,174,183,214 'creation':65 'credenti':89,97,98,123 'criteria':822 'crud':142,760 'data':3,60 'db':25,52,678,746 'defaultazurecredenti':112 'defaultazurecredentialbuild':125 'defaultendpointsprotocol':670 'delet':135,329,529 'describ':774,790 'design':690 'direct':204 'distribut':694 'doubl':253,255,558,609,616 'e':646 'e.getmessage':653 'e.getresponse':649 'effici':148 'electron':399,407,626 'endpoint':96,108,122,675,683 'entir':290 'entiti':138,146,157,215,220,239,241,244,267,291,313,321,327,330,336,342,345,370,431,449,535,643,656,706,727,730,759 'entity.getpartitionkey':351 'entity.getproperty':251,256,379,381 'entity.getrowkey':352,437 'environ':661,802 'environment-specif':801 'eq':363,398,406,518 'error':636,652 'etag':553 'even':696 'except':188 'execut':769 'exist':178,186,657 'expert':807 'field':565 'filter':354,386,388,400,412,510,712 'found':660 'ge':418 'get':193,240 'getnam':598 'getpartitionkey':569 'getpric':610 'getrowkey':583 'getstatuscod':650 'getter':560 'getters/setters':595 'group':145 'gt':410 'handl':637 'https':671 'identifi':153 'implement':540 'import':70,72,74,86,116,217,269,338,442,444,446,497,499,639 'input':816 'insert':315,323 'instal':55 'isavail':236 'item':467,478,490 'java':5,16,32,43,69,85,103,115,173,196,216,242,268,314,331,337,387,441,496,531,536,638,741 'java.util.arrays':447 'keep':729 'key':84,128,144,151,391,454,689,692,751,755,757 'key-valu':750 'laptop':628,631 'le':422 'limit':778 'list':134,335,340,455,494,501 'listentitiesopt':357,360,392,395 'listtablesopt':512,515 'load':695 'manag':131,137 'match':787 'merg':271,318,483 'miss':824 'mode':319 'multi':705 'multi-ent':704 'multipl':402 'must':450 'mytabl':182,192,203,212,519,533 'n':263,350,378,425 'name':226,249,252,264,299,366,380,466,477,489,556,600,605,607 'need':722 'new':78,90,94,106,120,124,208,221,278,294,359,394,458,461,469,472,480,484,514,623 'nosql':749 'null':373,374,434,435,525,526 'odata':385 'offsetdatetim':549 'oper':415,439,699 'optim':710 'option':358,372,393,433,513,524 'options.setfilter':404,416 'options.settop':427 'output':796 'overrid':566,572,580,586 'overview':777 'partit':143,156,390,453,688,754 'partitionkey':223,246,280,296,333,362,397,405,544,571,577,579,714 'pattern':170 'perform':725 'permiss':817 'phrase':738 'possibl':716 'practic':686 'price':230,254,257,261,265,283,304,367,382,409,559,612,617,619 'privat':542,545,548,551,554,557 'product':227,259,300,539,621,622,624,635 'product.setname':630 'product.setpartitionkey':625 'product.setprice':632 'product.setrowkey':627 'project':719 'properti':164,275,723 'public':537,567,573,581,587,596,601,608,613 'quantiti':233,307,417,421 'queri':149,383,709 'replac':288,289,325 'replaceent':293,310 'requir':815 'result':426 'return':570,584,599,611 'review':808 'row':150,159,756 'row1':464 'row2':475 'row3':487 'rowkey':224,247,281,297,334,547,585,591,593 'safeti':818 'sale':364 'sas':101 'sastoken':109 'scope':789 'sdk':14,30,41,744 'select':356,718,721 'servic':198 'servicecli':77,93,105,119 'serviceclient.createtable':181 'serviceclient.createtableifnotexists':191 'serviceclient.deletetable':532 'serviceclient.gettableclient':202 'serviceclient.listtables':507,523 'setfilt':361,396,516 'setnam':603 'setpartitionkey':575 'setpric':615 'setrowkey':589 'setselect':365 'setter':562 'share':83 'size':728 'skill':765,781 'skill-azure-data-tables-java' 'source-sickn33' 'specif':803 'specifi':274 'status':648 'stop':809 'storag':8,22,35,49,113,166,664,733,743,753 'string':68,248,250,543,546,552,555,568,576,582,590,597,604,669 'substitut':799 'success':821 'system.out.printf':258,347,375 'system.out.println':436,508,527,647,651 'tabl':4,7,13,21,26,29,34,40,48,53,61,132,141,172,175,194,495,503,506,511,522,530,667,674,679,682,740,742,747,758 'table.core.windows.net':676 'table.cosmosdb.azure.com':684 'table.getname':509,528 'tablecli':136,179,180,189,190,200,201,206,207 'tableclient.createentity':238,634,642 'tableclient.deleteentity':332 'tableclient.getentity':245 'tableclient.listentities':346,371,432 'tableclient.submittransaction':492 'tableclient.updateentity':285,309 'tableclient.upsertentity':320,326 'tableclientbuild':209 'tableent':219,222,243,276,279,292,295,344,369,430,462,473,485,541 'tableentityupdatemode.merge':287,322 'tableentityupdatemode.replace':311,328 'tableitem':505,521 'tablenam':211,517 'tableservicecli':76,92,104,118,130 'tableserviceclientbuild':79,95,107,121 'tableserviceexcept':645 'tabletransactionact':459,470,481 'tabletransactionactiontype.create':460,471 'tabletransactionactiontype.upsert':482 'task':785 'test':805 'this.name':606 'this.partitionkey':578 'this.price':618 'this.rowkey':592 'throw':176 'timestamp':550 'token':102 'top':424 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'transact':440,701 'treat':794 'tri':641 'trigger':737 'true':237 'type':534 'uniqu':152 'updat':266,272,302,317,707 'updateent':277,286 'upsert':312 'usag':620 'use':10,37,700,763,779 'valid':804 'valu':752 'variabl':662 'void':574,588,602,614 'within':139,154 'work':17,44 'workflow':771 'xml':56","prices":[{"id":"746c6174-9f7e-42ec-a2b0-537767738065","listingId":"3f8d85f3-2a60-453d-8d46-f03e169b14ae","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:32:20.890Z"}],"sources":[{"listingId":"3f8d85f3-2a60-453d-8d46-f03e169b14ae","source":"github","sourceId":"sickn33/antigravity-awesome-skills/azure-data-tables-java","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-data-tables-java","isPrimary":false,"firstSeenAt":"2026-04-18T21:32:20.890Z","lastSeenAt":"2026-04-24T18:50:30.082Z"}],"details":{"listingId":"3f8d85f3-2a60-453d-8d46-f03e169b14ae","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"azure-data-tables-java","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34928,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-24T06:41:17Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"b8c48d664eff32204e715d78ebd61261bb147029","skill_md_path":"skills/azure-data-tables-java/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-data-tables-java"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"azure-data-tables-java","description":"Build table storage applications using the Azure Tables SDK for Java. Works with both Azure Table Storage and Cosmos DB Table API."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-data-tables-java"},"updatedAt":"2026-04-24T18:50:30.082Z"}}