{"id":20908665,"url":"https://github.com/viant/bigquery","last_synced_at":"2026-02-16T20:36:19.081Z","repository":{"id":57645845,"uuid":"441815550","full_name":"viant/bigquery","owner":"viant","description":"BigQuery database/sql golang driver","archived":false,"fork":false,"pushed_at":"2025-06-12T02:33:18.000Z","size":118,"stargazers_count":9,"open_issues_count":1,"forks_count":3,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-06-12T03:38:30.847Z","etag":null,"topics":["bigquery","driver","golang","sql"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/viant.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-12-26T05:20:04.000Z","updated_at":"2025-06-12T02:33:22.000Z","dependencies_parsed_at":"2024-01-10T17:32:20.065Z","dependency_job_id":"47b8416e-1842-471a-aba5-2dc94a89112a","html_url":"https://github.com/viant/bigquery","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/viant/bigquery","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/viant%2Fbigquery","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/viant%2Fbigquery/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/viant%2Fbigquery/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/viant%2Fbigquery/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/viant","download_url":"https://codeload.github.com/viant/bigquery/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/viant%2Fbigquery/sbom","scorecard":{"id":919865,"data":{"date":"2025-08-11","repo":{"name":"github.com/viant/bigquery","commit":"52b5299d4c7e3b339b5ab8aaab4a270584a2ee1a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.8,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":1,"reason":"Found 3/26 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":1,"reason":"2 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 8 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":6,"reason":"4 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2025-3487 / GHSA-hcg3-q754-cr77","Warn: Project is vulnerable to: GO-2025-3503 / GHSA-qxp5-gwg8-xv66","Warn: Project is vulnerable to: GO-2025-3595 / GHSA-vvgc-356p-c3xw","Warn: Project is vulnerable to: GO-2025-3488 / GHSA-6v2p-p543-phr9"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-25T00:46:50.574Z","repository_id":57645845,"created_at":"2025-08-25T00:46:50.574Z","updated_at":"2025-08-25T00:46:50.574Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29517617,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-16T18:37:19.720Z","status":"ssl_error","status_checked_at":"2026-02-16T18:36:46.920Z","response_time":115,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["bigquery","driver","golang","sql"],"created_at":"2024-11-18T14:08:21.293Z","updated_at":"2026-02-16T20:36:19.074Z","avatar_url":"https://github.com/viant.png","language":"Go","readme":"# BigQuery SQL Driver\n\n[![BigQuery database/sql driver in Go.](https://goreportcard.com/badge/github.com/viant/bigquery)](https://goreportcard.com/report/github.com/viant/bigquery)\n[![GoDoc](https://godoc.org/github.com/viant/bigquery?status.svg)](https://godoc.org/github.com/viant/bigquery)\n\nThis library is compatible with Go 1.17+\n\nPlease refer to [`CHANGELOG.md`](CHANGELOG.md) if you encounter breaking changes.\n\n- [DSN](#dsn-data-source-name)\n- [Usage](#usage)\n- [Benchmark](#benchmark)\n- [License](#license)\n- [Credits and Acknowledgements](#credits-and-acknowledgements)\n- [Custom OAuth 2.0 authentication](#custom-oauth-20-authentication)\n\nThis library provides fast implementation of the BigQuery Client as a database/sql drvier.\n\n#### DSN Data Source Name\n\nThe BigQuery driver accepts the following DSN\n\n* 'bigquery://projectID/[location/]datasetID?queryString'\n\n  Where queryString can optionally configure the following option:\n    - credURL: (url encoded) local location or URL supported by  [Scy](https://github.com/viant/scy)\n    - credKey: optional (url encoded) [Scy](https://github.com/viant/scy) secret manager key or key location\n    - credID: [Scy](https://github.com/viant/scy) resource secret ID\n    - credJSON: rawURL base64 encoded cred JSON (not recommended)\n    - endpoint\n    - userAgent\n    - apiKey\n    - quotaProject\n    - scopes\n\nSince this library uses [Google Cloud API](google.golang.org/api/bigquery/v2)\nyou can pass your credentials via GOOGLE_APPLICATION_CREDENTIALS environment variable.\n\n## Usage:\n\n```go\npackage main\n\nimport (\n\t\"database/sql\"\n\t\"fmt\"\n\t\"context\"\n\t\"log\"\n\t_ \"github.com/viant/bigquery\"\n)\n\ntype Participant struct {\n\tName   string\n\tSplits []float64\n}\n\nfunc main() {\n\n\tdb, err := sql.Open(\"bigquery\", \"bigquery://myProjectID/mydatasetID\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tdefer db.Close()\n\n\tSQL := `WITH races AS (\n\t\t  SELECT \"800M\" AS race,\n\t\t    [STRUCT(\"Ben\" as name, [23.4, 26.3] as splits), \n\t\t \t STRUCT(\"Frank\" as name, [23.4, 26.3] as splits)\n\t\t\t]\n\t\t       AS participants)\n\t\tSELECT\n\t\t  race,\n\t\t  participant\n\t\tFROM races r\n\t\tCROSS JOIN UNNEST(r.participants) as participant`\n\n\trows, err := db.QueryContext(context.Background(), SQL)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tdefer rows.Close()\n\tfor rows.Next() {\n\t\tif err := rows.Err(); err != nil {\n\t\t\tlog.Fatal(err)\n\t\t}\n\t\tvar race string\n\t\tvar participant Participant\n\t\terr = rows.Scan(\u0026race, \u0026participant)\n\t\tfmt.Printf(\"fetched: %v %+v\\n\", race, participant)\n\t\tif err != nil {\n\t\t\tlog.Fatal(err)\n\t\t}\n\t}\n}\n```\n\n## Data Ingestion (Load/Stream)\n\nThis driver implements LOAD/STREAM operation with the following SQL:\n\n### Loading data\n\nTo load data register a reader for supported source format, followed by LOAD SQL.\n\n```sql\nLOAD 'Reader:\u003cSOURCE_FORMAT\u003e:\u003cREADER_ID\u003e' DATA INTO TABLE myproject.mydataset.mytable\n```\n\nThe following snippet register READER_ID\n\n```go\n err := reader.Register(readerID, myReader)\n```\n\nThe following code loads CSV data\n\n```go\npackage mypkg\n\nimport (\n\t\"context\"\n\t\"database/sql\"\n\t\"fmt\"\n\t\"github.com/viant/bigquery/reader\"\n\t\"log\"\n\t\"strings\"\n)\n\nfunc ExampleOfCSVLoad() {\n\tprojectID := \"my-gcp-project\"\n\tdb, err := sql.Open(\"bigquery\", fmt.Sprintf(\"bigquery://%v/test\", projectID))\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\treaderID := \"123456\"\n\tcsvReader := strings.NewReader(\"ID,Name,Desc\\n1,Name 1,Test\\n2,Name 2,Test 2\")\n\terr = reader.Register(readerID, csvReader)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tdefer reader.Unregister(readerID)\n\tSQL := fmt.Sprintf(`LOAD 'Reader:csv:%v' DATA INTO TABLE mytable`, readerID)\n\tresult, err := db.ExecContext(context.TODO(), SQL)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\taffected, _ := result.RowsAffected()\n\tfmt.Printf(\"loaded: %v rows\", affected)\n}\n```\n\n## Custom OAuth 2.0 authentication\n\nSometimes you already have a **Google** OAuth 2.0 client (client-id / secret) and an access or refresh token that\nyou would like the driver to use.  \n`OAuth2Manager` can serialise such an `oauth2.Config` together with the corresponding `oauth2.Token` and make them\naddressable via URLs that you embed in the DSN.\n\n### Step-by-step example\n\n```go\npackage main\n\nimport (\n    \"context\"\n    \"database/sql\"\n    \"encoding/json\"\n    \"fmt\"\n    \"log\"\n    \"net/url\"\n    \"time\"\n\n    _ \"github.com/viant/bigquery\"\n    \"github.com/viant/bigquery\"\n\n    \"golang.org/x/oauth2\"\n)\n\nfunc main() {\n    projectID := \"my-project\"\n    datasetID := \"my_dataset\"\n\n    // 1. Build the OAuth2 client configuration. In real life you would usually\n    //    load this from a secret manager or configuration file.\n    // IMPORTANT: the endpoints **must** be Google's authorization server\n    // endpoints; BigQuery only accepts Google-issued access tokens.\n    oauthCfg := \u0026oauth2.Config{\n        ClientID:     \"\u003cCLIENT_ID\u003e\",\n        ClientSecret: \"\u003cCLIENT_SECRET\u003e\",\n        Endpoint: oauth2.Endpoint{\n            AuthURL:  \"https://accounts.google.com/o/oauth2/v2/auth\",\n            TokenURL: \"https://oauth2.googleapis.com/token\",\n        },\n        RedirectURL: \"http://localhost/oauth2callback\",\n        Scopes:      []string{\"https://www.googleapis.com/auth/bigquery\"},\n    }\n\n    // 2. Provide a *valid* access or refresh token obtained beforehand.\n    //    The token expiry _must_ be set so that the helper can decide when to\n    //    refresh it.\n    oauthToken := \u0026oauth2.Token{\n        AccessToken:  \"\u003cACCESS_TOKEN\u003e\",\n        RefreshToken: \"\u003cREFRESH_TOKEN\u003e\", // optional – only when you want automatic refresh\n        TokenType:    \"Bearer\",\n        Expiry:       time.Now().Add(time.Hour),\n    }\n\n    // 3. Serialise both config and token to in-memory URLs that can be used in\n    //    the DSN. You may also store them in any other fs supported by Afero\n    //    (e.g. Google Cloud Storage, local disk, S3, …).\n    helper := bigquery.NewOAuth2Manager()\n    ctx := context.Background()\n\n    cfgURL, err := helper.WithConfigURL(ctx, oauthCfg)\n    if err != nil {\n        log.Fatalf(\"failed to persist oauth2 config: %v\", err)\n    }\n\n    tokenURL, err := helper.WithTokenURL(ctx, oauthToken)\n    if err != nil {\n        log.Fatalf(\"failed to persist oauth2 token: %v\", err)\n    }\n\n    // 4. Build the DSN using the two generated URLs. Be sure to URL-escape them\n    //    because the DSN itself is an URL as well.\n    dsn := fmt.Sprintf(\n        \"bigquery://%s/%s?oauth2ClientURL=%s\u0026oauth2TokenURL=%s\",\n        projectID,\n        datasetID,\n        url.QueryEscape(cfgURL),\n        url.QueryEscape(tokenURL),\n    )\n\n    db, err := sql.Open(\"bigquery\", dsn)\n    if err != nil {\n        log.Fatal(err)\n    }\n    defer db.Close()\n\n    // Now use the db as usual – the driver will pick the token source built\n    // from your custom OAuth2 config and token and will automatically refresh\n    // the access token when it expires.\n    var version string\n    if err := db.QueryRowContext(ctx, \"SELECT version()\" ).Scan(\u0026version); err != nil {\n        log.Fatal(err)\n    }\n    fmt.Printf(\"connected, BigQuery engine version: %s\\n\", version)\n\n    // For demonstration purposes print the DSN with the embedded URLs so that\n    // you can see what happens under the hood.\n    if raw, _ := json.MarshalIndent(struct {\n        DSN       string `json:\"dsn\"`\n        ConfigURL string `json:\"oauth2ClientURL\"`\n        TokenURL  string `json:\"oauth2TokenURL\"`\n    }{dsn, cfgURL, tokenURL}, \"\", \"  \"); raw != nil {\n        fmt.Printf(\"%s\\n\", raw)\n    }\n}\n```\n\n**Important notes**\n\n1. `OAuth2Manager` uses an in-memory ( `mem://` ) file-system backend by default.  \n   The URLs produced in the example therefore live only for the lifetime of the\n   current process.  If you want to persist them, provide your own `afs.Service`\n   or store the JSON blobs yourself and pass their URLs in the DSN – the driver\n   only requires that the URLs are reachable, not that they were created by\n   `OAuth2Manager`.\n2. The provided token **must** have the `Expiry` field set.  When the expiry is\n   reached the token will be refreshed automatically using the refresh token\n   and the OAuth2 endpoint supplied in the config.\n3. The `oauth2.Config.Endpoint` **must** point to Google's authorization server\n   (`https://accounts.google.com/o/oauth2/v2/auth` and\n   `https://oauth2.googleapis.com/token`).  BigQuery accepts only Google-issued\n   access tokens.\n\n\n### Loading application data\n\nThe following code loads CSV data\n\n```go\npackage mypkg\n\nimport (\n\t\"context\"\n\t\"database/sql\"\n\t\"fmt\"\n\t\"github.com/viant/bigquery/reader\"\n\t\"github.com/viant/sqlx/io/load/reader/parquet\"\n\t\"github.com/google/uuid\"\n\t\"log\"\n)\n\ntype Record struct {\n\tID     int     `parquet:\"id,plain,optional\"`\n\tName   string  `parquet:\"name,plain,optional\"`\n\tActive bool    `parquet:\"active,plain,optional\"`\n\tAmount float64 `parquet:\"amount,plain,optional\"`\n}\n\nfunc ExampleOfAppDataLoad() {\n\tprojectID := \"my-gcp-project\"\n\tdb, err := sql.Open(\"bigquery\", fmt.Sprintf(\"bigquery://%v/test\", projectID))\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tvar records = []*Record{\n\t\t{\n\t\t\tID:     1,\n\t\t\tName:   \"record 1\",\n\t\t\tAmount: 12.2,\n\t\t},\n\t\t{\n\t\t\tID:     2,\n\t\t\tName:   \"record 2\",\n\t\t\tAmount: 12.3,\n\t\t},\n\t}\n\treaderID := uuid.New().String()\n    parquetReader, err := parquet.NewReader(records)\n    if err != nil {\n        log.Fatal(err)\n    }\n\terr = reader.Register(readerID, parquetReader)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tdefer reader.Unregister(readerID)\n\tSQL := fmt.Sprintf(`LOAD 'Reader:parquet:%v' DATA INTO TABLE mytable`, readerID)\n\tresult, err := db.ExecContext(context.TODO(), SQL)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\taffected, _ := result.RowsAffected()\n\tfmt.Printf(\"loaded: %v rows\", affected)\n}\n```\n\n\n\n### Load option control\n\nTo customize Load you can inline\n[JobConfigurationLoad](https://github.com/googleapis/google-api-go-client/blob/main/bigquery/v2/bigquery-gen.go#L4297)\nyou can\nas JSON as a hint\n``` LOAD 'Reader:\u003cSOURCE_FORMAT\u003e:\u003cREADER_ID\u003e' /*+ \u003cHINT\u003e +*/ DATA INTO TABLE mytable```\nfor example:\n\n```sql\nLOAD 'Reader:CSV:201F973D-9BAB-4E0A-880F-7830B876F210' /*+ {\n    \"AllowJaggedRows\": true,\n    \"AllowQuotedNewlines\":true\n  } +*/  DATA INTO TABLE mytable\n```\n\n\n## Benchmark\n\nBenchmark runs 3 times the following queries:\n\n- primitive types:\n\n```sql \n   SELECT state,gender,year,name,number \n   FROM `bigquery-public-data.usa_names.usa_1910_2013` LIMIT 10000\n```\n\n- complex type (repeated string/repeated record)\n\n```sql \n   SELECT  t.publication_number, t.inventor, t.assignee, t.description_localized \n   FROM `patents-public-data.patents.publications_202105` t ORDER BY 1 LIMIT 1000\n```\n\nIn both case database/sql driver is faster and allocate way less memory\nthan [GCP BigQuery API Client](https://cloud.google.com/bigquery/docs/reference/libraries#client-libraries-install-go)\n\n```go\ngoos: darwin\ngoarch: amd64\npkg: github.com/viant/bigquery/bench\ncpu: Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz\nBenchmark_Primitive_GCPClient\ndatabase/gcp: primitive types 3.918388531s\nBenchmark_Primitive_GCPClient-16               1    3918442974 ns/op    42145144 B/op      830647 allocs/op\nBenchmark_Primitive_SQLDriver\ndatabase/sql: primitive types 2.880091637s\nBenchmark_Primitive_SQLDriver-16               1    2880149491 ns/op    22301848 B/op      334547 allocs/op\nBenchmark_Complex_GCPClient\ndatabase/gcp: structured types 3.303497894s\nBenchmark_Complex_GCPClient-16               1    3303548761 ns/op    11551216 B/op      154660 allocs/op\nBenchmark_Complex_SQLDriver\ndatabase/sql: structured types 2.690012577s\nBenchmark_Complex_SQLDriver-16               1    2690056675 ns/op     6643176 B/op       71562 allocs/op\nPASS\n```\n\n## License\n\nThe source code is made available under the terms of the Apache License, Version 2, as stated in the file `LICENSE`.\n\nIndividual files may be made available under their own specific license,\nall compatible with Apache License, Version 2. Please see individual files for details.\n\n## Credits and Acknowledgements\n\n**Library Author:** Adrian Witas\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fviant%2Fbigquery","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fviant%2Fbigquery","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fviant%2Fbigquery/lists"}