{"id":42266538,"url":"https://github.com/hawkfish/olapscript","last_synced_at":"2026-01-27T06:46:53.186Z","repository":{"id":56779414,"uuid":"523501773","full_name":"hawkfish/olapscript","owner":"hawkfish","description":"An OLAP engine for Google App Script","archived":false,"fork":false,"pushed_at":"2022-10-17T21:25:36.000Z","size":346,"stargazers_count":3,"open_issues_count":4,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2023-03-02T22:52:24.919Z","etag":null,"topics":["appscript","google-apps-script","olap"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hawkfish.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-08-10T21:27:58.000Z","updated_at":"2022-11-17T21:01:02.000Z","dependencies_parsed_at":"2023-01-20T02:52:23.104Z","dependency_job_id":null,"html_url":"https://github.com/hawkfish/olapscript","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"purl":"pkg:github/hawkfish/olapscript","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hawkfish%2Folapscript","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hawkfish%2Folapscript/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hawkfish%2Folapscript/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hawkfish%2Folapscript/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hawkfish","download_url":"https://codeload.github.com/hawkfish/olapscript/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hawkfish%2Folapscript/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28806719,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T06:25:51.065Z","status":"ssl_error","status_checked_at":"2026-01-27T06:25:50.640Z","response_time":168,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["appscript","google-apps-script","olap"],"created_at":"2026-01-27T06:46:52.484Z","updated_at":"2026-01-27T06:46:53.179Z","avatar_url":"https://github.com/hawkfish.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OLAPScript\nAn OLAP engine for Google Apps Script\n\nThis module implements a relational pipeline tookit \n for manipulating Google Sheets using Apps Script.\n \n The central object is a Table, which uses a column oriented storage model\n for holding Values. The values can be read from a sheet or provided as\n JavaScript data structures. Tables can be written out to target sheets\n when processing is complete.\n \n To support pipelining, the Table class provides data streaming methods for\n relational and data cleaning operations. This lets you write SQL-like chains\n of operations:\n \n ```js\n Table.fromSheet(\u003csource sheet\u003e)\n      .select(\u003cexpressions\u003e)\n      .unnest(\u003carray column\u003e)\n      .fill(\u003ccolumn\u003e, \u003cdefault\u003e)\n      .where(\u003cpredicate\u003e)\n      .equiJoin(\u003cTable\u003e, \u003cmatching keys\u003e)\n      .groupby(\u003cgroups\u003e, \u003caggregates\u003e)\n      .orderby(\u003cordering\u003e)\n      .limit(100)\n      .toSheet(\u003ctarget sheet\u003e);\n ```\n \n Pipelines avoid copying data wherever possible, so intermediate results \n can be cached without worrying about later processing.\n \n Expressions are implemented as a simple tree of nodes, and any function\n can be used in a function node. Column reference expressions make no copies.\n Aggregates are a separate type of object, with initialize, update and finalize \n functions, and the arguments can be arbitraary expressions. Ordering is also \n expression-based.\n \n Note that some of this functionality is not yet implemented, and the error checking\n is pretty much non-existent, but the architecture is based on 50 years of database\n theory and is hopefully easy to express data validation and sheet generation with.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhawkfish%2Folapscript","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhawkfish%2Folapscript","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhawkfish%2Folapscript/lists"}