{"id":23473317,"url":"https://github.com/scalikejdbc/csvquery","last_synced_at":"2025-04-14T18:42:34.561Z","repository":{"id":22228526,"uuid":"25561523","full_name":"scalikejdbc/csvquery","owner":"scalikejdbc","description":"A handy SQL runner to work with CSV files","archived":false,"fork":false,"pushed_at":"2025-04-09T21:30:21.000Z","size":391,"stargazers_count":37,"open_issues_count":3,"forks_count":6,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-04-09T22:28:03.448Z","etag":null,"topics":["csv","csv-files","scala","scalikejdbc","sql"],"latest_commit_sha":null,"homepage":"","language":"Scala","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/scalikejdbc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2014-10-22T04:26:33.000Z","updated_at":"2025-04-09T21:30:24.000Z","dependencies_parsed_at":"2023-12-02T05:24:07.128Z","dependency_job_id":"d058850f-a9fc-4d92-909e-67382b0e4be6","html_url":"https://github.com/scalikejdbc/csvquery","commit_stats":null,"previous_names":["seratch/csvquery"],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scalikejdbc%2Fcsvquery","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scalikejdbc%2Fcsvquery/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scalikejdbc%2Fcsvquery/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scalikejdbc%2Fcsvquery/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/scalikejdbc","download_url":"https://codeload.github.com/scalikejdbc/csvquery/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248938419,"owners_count":21186403,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["csv","csv-files","scala","scalikejdbc","sql"],"created_at":"2024-12-24T17:19:54.566Z","updated_at":"2025-04-14T18:42:34.550Z","avatar_url":"https://github.com/scalikejdbc.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CSVQuery \n\n`CSVQuery` is a handy SQL runner to work with CSV files. You can use SQL to parse and filter CSV rows!\n\n## Setup with [sbt](https://github.com/sbt/sbt)\n\n```sh\necho 'scalaVersion := \"2.13.16\"\n\nlibraryDependencies += \"org.scalikejdbc\" %% \"csvquery\" % \"1.5.0\"' \u003e build.sbt\n\necho \"Alice,23\nBob,34\nChris,30\" \u003e sample.csv\n```\n\nAnd then try the folling things on `sbt console`.\n\n```scala\nimport scalikejdbc._\nimport csvquery._\nimplicit val session: DBSession = autoCSVSession\n\n// ---\n// simple queries\n\nval csv = CSV(\"./sample.csv\", Seq(\"name\", \"age\"))\n\nval count: Long = withCSV(csv) { table =\u003e\n  sql\"select count(*) from $table\".map(_.long(1)).single.apply().get\n}\n\nval records: Seq[Map[String, Any]] = withCSV(csv) { table =\u003e\n  sql\"select * from $table\".toMap.list.apply()\n}\n\n// ---\n// join queries\n\ncase class Account(name: String, companyName: String, company: Option[Company])\ncase class Company(name: String, url: String)\n\nval (accountsCsv, companiesCsv) = (\n  CSV(\"src/test/resources/accounts.csv\", Seq(\"name\", \"company_name\")),\n  CSV(\"src/test/resources/companies.csv\", Seq(\"name\", \"url\"))\n)\nval accounts: Seq[Account] = withCSV(accountsCsv, companiesCsv) { (a, c) =\u003e\n  sql\"select a.name, a.company_name, c.url from $a a left join $c c on a.company_name = c.name\".map { rs =\u003e\n    new Account(\n      name = rs.get(\"name\"),\n      companyName = rs.get(\"company_name\"),\n      company = rs.stringOpt(\"url\").map(url =\u003e Company(rs.get(\"company_name\"), url))\n    )\n  }.list.apply()\n}\n```\n\nOutput example:\n\n```\nscala\u003e import scalikejdbc._\nimport scalikejdbc._\n\nscala\u003e import csvquery._\nimport csvquery._\n\nscala\u003e implicit val session: DBSession = autoCSVSession\n13:14:11.078 [run-main-0] DEBUG scalikejdbc.ConnectionPool$ - Registered connection pool : ConnectionPool(url:jdbc:h2:mem:csvquery-1413951250977, user:) using factory : \u003cdefault\u003e\nsession: scalikejdbc.DBSession = NamedAutoSession(csvquery-1413951250977)\n\nscala\u003e val csv = CSV(\"./sample.csv\", Seq(\"name\", \"age\"))\ncsv: csvquery.CSV = CSV(./sample.csv,List(name, age),UTF-8)\n\nscala\u003e val count = withCSV(csv) { table =\u003e\n     |   sql\"select count(*) from $table\".map(_.long(1)).single.apply().get\n     | }\n13:14:15.815 [run-main-0] DEBUG s.StatementExecutor$$anon$1 - SQL execution completed\n\n  [SQL Execution]\n   select count(*) from csvread('./sample.csv', 'NAME,AGE', 'UTF-8'); (0 ms)\n\n  [Stack Trace]\n    ...\n    $line8.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$1.apply(\u003cconsole\u003e:23)\n    $line8.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$1.apply(\u003cconsole\u003e:22)\n    csvquery.CSVQuery$.withCSV(CSVQuery.scala:15)\n    csvquery.package$.withCSV(package.scala:9)\n    $line8.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$.\u003cinit\u003e(\u003cconsole\u003e:22)\n    $line8.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$.\u003cclinit\u003e(\u003cconsole\u003e)\n    $line8.$eval$.$print$lzycompute(\u003cconsole\u003e:7)\n    $line8.$eval$.$print(\u003cconsole\u003e:6)\n    $line8.$eval.$print(\u003cconsole\u003e)\n    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n    java.lang.reflect.Method.invoke(Method.java:483)\n    scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:739)\n    scala.tools.nsc.interpreter.IMain$Request.loadAndRun(IMain.scala:986)\n    ...\n\ncount: Long = 3\n\nscala\u003e val records = withCSV(csv) { table =\u003e\n     |   sql\"select * from $table\".toMap.list.apply()\n     | }\n13:14:18.583 [run-main-0] DEBUG s.StatementExecutor$$anon$1 - SQL execution completed\n\n  [SQL Execution]\n   select * from csvread('./sample.csv', 'NAME,AGE', 'UTF-8'); (1 ms)\n\n  [Stack Trace]\n    ...\n    $line9.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$1.apply(\u003cconsole\u003e:23)\n    $line9.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$1.apply(\u003cconsole\u003e:22)\n    csvquery.CSVQuery$.withCSV(CSVQuery.scala:15)\n    csvquery.package$.withCSV(package.scala:9)\n    $line9.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$.\u003cinit\u003e(\u003cconsole\u003e:22)\n    $line9.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$.\u003cclinit\u003e(\u003cconsole\u003e)\n    $line9.$eval$.$print$lzycompute(\u003cconsole\u003e:7)\n    $line9.$eval$.$print(\u003cconsole\u003e:6)\n    $line9.$eval.$print(\u003cconsole\u003e)\n    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n    java.lang.reflect.Method.invoke(Method.java:483)\n    scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:739)\n    scala.tools.nsc.interpreter.IMain$Request.loadAndRun(IMain.scala:986)\n    ...\n\nrecords: List[Map[String,Any]] = List(Map(NAME -\u003e Alice, AGE -\u003e 23), Map(NAME -\u003e Bob, AGE -\u003e 34), Map(NAME -\u003e Chris, AGE -\u003e 30))\n\nscala\u003e val accounts: Seq[Account] = withCSV(accountsCsv, companiesCsv) { (a, c) =\u003e\n     |   sql\"select a.name, a.company_name, c.url  from $a a left join $c  c on a.company_name = c.name\".map { rs =\u003e\n     |     new Account(\n     |       name = rs.get(\"name\"),\n     |       companyName = rs.get(\"company_name\"),\n     |       company = rs.stringOpt(\"url\").map(url =\u003e Company(rs.get(\"company_name\"), url))\n     |     )\n     |   }.list.apply()\n     | }\n13:14:18.590 [run-main-0] DEBUG s.StatementExecutor$$anon$1 - SQL execution completed\n\n  [SQL Execution]\n   select a.name, a.company_name, c.url from csvread('src/test/resources/accounts.csv', 'NAME,COMPANY_NAME', 'UTF-8') a left join csvread('src/test/resources/companies.csv', 'NAME,URL', 'UTF-8') c on a.company_name = c.name; (3 ms)\n\n  [Stack Trace]\n    ...\n    $line4.$read$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$1.apply(\u003cconsole\u003e:27)\n    $line4.$read$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$1.apply(\u003cconsole\u003e:20)\n    csvquery.CSVQuery$.withCSV(CSVQuery.scala:17)\n    csvquery.package$.withCSV(package.scala:11)\n    $line4.$read$$iw$$iw$$iw$$iw$$iw$$iw$.\u003cinit\u003e(\u003cconsole\u003e:20)\n    $line4.$read$$iw$$iw$$iw$$iw$$iw$$iw$.\u003cclinit\u003e(\u003cconsole\u003e)\n    $line4.$eval$.$print$lzycompute(\u003cconsole\u003e:7)\n    $line4.$eval$.$print(\u003cconsole\u003e:6)\n    $line4.$eval.$print(\u003cconsole\u003e)\n    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n    java.lang.reflect.Method.invoke(Method.java:483)\n    scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:739)\n    scala.tools.nsc.interpreter.IMain$Request.loadAndRun(IMain.scala:986)\n    ...\n\naccounts: Seq[Account] = List(Account(Alice,Oracle,Some(Company(Oracle,http://www.oracle.com/index.html))), Account(Bob,Google,Some(Company(Google,https://www.google.com/))), Account(Chris,Google,Some(Company(Google,https://www.google.com/))), Account(Denis,Microsoft,None), Account(Eric,Red Hat,Some(Company(Red Hat,http://www.redhat.com/en))), Account(Fred,Facebook,Some(Company(Facebook,https://www.facebook.com/))), Account(George,Google,Some(Company(Google,https://www.google.com/))), Account(Henry,Twitter,Some(Company(Twitter,https://twitter.com/))), Account(Iris,Microsoft,None), Account(John,Google,Some(Company(Google,https://www.google.com/))))\n```\n\nMore examples here:\n\nhttps://github.com/scalikejdbc/csvquery/blob/master/src/test/scala/example/UsageSpec.scala\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscalikejdbc%2Fcsvquery","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fscalikejdbc%2Fcsvquery","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscalikejdbc%2Fcsvquery/lists"}