| CSVSQL(1) | csvkit | CSVSQL(1) |
نام (NAME)
csvsql - تولید دستورات SQL برای فایلهای CSV یا اجرای مستقیم آنها روی پایگاه داده
توضیحات (DESCRIPTION)
دستورات SQL را برای یک فایل CSV تولید کنید یا آن دستورات را مستقیماً روی یک پایگاه داده اجرا نمایید. در حالت دوم، هم از ایجاد جدولها و هم از درج دادهها پشتیبانی میشود:
usage: csvsql [-h] [-d DELIMITER] [-t] [-q QUOTECHAR] [-u {0,1,2,3}] [-b]
[-p ESCAPECHAR] [-z FIELD_SIZE_LIMIT] [-e ENCODING] [-L LOCALE]
[-S] [--blanks] [--null-value NULL_VALUES [NULL_VALUES ...]]
[--date-format DATE_FORMAT] [--datetime-format DATETIME_FORMAT]
[-H] [-K SKIP_LINES] [-v] [-l] [--zero] [-V]
[-i {firebird,mssql,mysql,oracle,postgresql,sqlite,sybase}]
[--db CONNECTION_STRING] [--query QUERIES] [--insert]
[--prefix PREFIX] [--before-insert BEFORE_INSERT]
[--after-insert AFTER_INSERT] [--tables TABLE_NAMES]
[--no-constraints] [--unique-constraint UNIQUE_CONSTRAINT]
[--no-create] [--create-if-not-exists] [--overwrite]
[--db-schema DB_SCHEMA] [-y SNIFF_LIMIT] [-I]
[--chunk-size CHUNK_SIZE]
[FILE [FILE ...]]
تولید دستورات SQL برای یک یا چند فایل CSV، یا اجرای مستقیم آن دستورات
روی یک پایگاه داده، و اجرای یک یا چند پرسوجوی SQL.
آرگومانهای موضعی:
FILE فایل(های) CSV برای پردازش. در صورت عدم ذکر، ورودی را
به عنوان داده پایپشده از طریق STDIN میپذیرد.
گزینههای اختیاری:
-h, --help نمایش این پیام راهنما و خروج
-i {mssql,mysql,oracle,postgresql,sqlite,duckdb,crate,ingres}, --dialect {mssql,mysql,oracle,postgresql,sqlite,duckdb,crate,ingres}
گویش SQL برای تولید. نمیتواند همراه با --db استفاده شود.
--db CONNECTION_STRING
در صورت وجود، یک رشته اتصال SQLAlchemy برای اجرای
مستقیم SQL تولیدشده روی یک پایگاه داده.
--engine-option ENGINE_OPTION ENGINE_OPTION
یک آرگومان کلیدواژهای برای create_engine() در SQLAlchemy،
به عنوان یک جفت جداشده با فاصله. این گزینه میتواند
چندین بار مشخص شود. برای مثال: thick_mode True
--query QUERIES اجرای یک یا چند پرسوجوی SQL جداشده با --sql-
delimiter، و خروجی دادن نتیجه آخرین پرسوجو به صورت
CSV. مقدار QUERY میتواند یک نام فایل باشد. گزینه --query
میتواند چندین بار مشخص شود.
--insert درج دادهها درون جدول. نیازمند --db است.
--prefix PREFIX افزودن یک عبارت پس از کلیدواژه INSERT، مانند
OR IGNORE یا OR REPLACE.
--before-insert BEFORE_INSERT
پیش از دستور INSERT، یک یا چند پرسوجوی SQL جداشده
با --sql-delimiter را اجرا میکند. نیازمند
--insert است.
--after-insert AFTER_INSERT
پس از دستور INSERT، یک یا چند پرسوجوی SQL جداشده
با --sql-delimiter را اجرا میکند. نیازمند
--insert است.
--sql-delimiter SQL_DELIMITER
جداکننده میان پرسوجوهای SQL در --query،
--before-insert، و --after-insert.
--tables TABLE_NAMES فهرستی از نامهای جدولها جداشده با کاما برای ایجاد.
به طور پیشفرض، نام جدولها بر اساس نام فایلها بدون پسوند
یا "stdin" نامگذاری میشوند.
--no-constraints تولید یک طرحواره (schema) بدون محدودیتهای طول یا
بررسیهای null. هنگام نمونهبرداری از جدولهای بزرگ مفید است.
--unique-constraint UNIQUE_CONSTRAINT
فهرستی جداشده با کاما از نام ستونها برای قرار گرفتن در
یک قید UNIQUE.
--no-create صرفنظر از ایجاد جدول. نیازمند --insert است.
--create-if-not-exists
ایجاد جدول در صورت عدم وجود، در غیر این صورت ادامه دادن.
نیازمند --insert است.
--overwrite حذف جدول در صورت وجود قبلی آن. نیازمند
--insert است. نمیتواند همراه با --no-create استفاده شود.
--db-schema DB_SCHEMA
نام اختیاری طرحواره پایگاه داده (schema) برای ایجاد
جدول(ها) در آن.
-y SNIFF_LIMIT, --snifflimit SNIFF_LIMIT
محدود کردن شناسایی گویش CSV به تعداد بایتهای مشخصشده.
مقدار "0" را برای غیرفعال کردن کامل شناسایی مشخص کنید،
یا "-1" برای بررسی کل فایل.
-I, --no-inference غیرفعال کردن استنتاج نوع (و --locale، --date-format،
--datetime-format، --no-leading-zeroes) هنگام تحلیل
ورودی.
--chunk-size CHUNK_SIZE
اندازه قطعه (chunk) برای درج دستهای در جدول. نیازمند
--insert است.
--min-col-len MIN_COL_LEN
حداقل طول ستونهای متنی.
--col-len-multiplier COL_LEN_MULTIPLIER
ضرب کردن حداکثر طول ستون در این ضریب برای گنجاندن
مقادیر بزرگتر در اجراهای بعدی.
همچنین ببینید: آرگومانهای مشترک همه ابزارها.
برای اطلاعات بیشتر درباره رشتههای اتصال و گویشهای پشتیبانیشده به مستندات SQLAlchemy مراجعه کنید.
اگر ترجیح میدهید گذرواژه خود را در رشته اتصال وارد نکنید، آن را به طور امن در یک فایل گذرواژه PostgreSQL، یک فایل گزینههای MySQL یا فایلهای مشابه برای سایر سیستمها ذخیره نمایید.
نکته:
نکته:
echo '{"a":{"b":"c"},"d":"e"}' | in2csv -f ndjson | csvsql --query 'SELECT "a/b" FROM stdin'
نکته:
مثالها (EXAMPLES)
تولید دستورات SQL
تولید یک عبارت در گویش PostgreSQL:
csvsql -i postgresql examples/realdata/FY09_EDU_Recipients_by_State.csv
تعامل با یک پایگاه داده SQL
ایجاد یک جدول و وارد کردن دادهها از CSV به طور مستقیم در PostgreSQL:
createdb test csvsql --db postgresql:///test --tables fy09 --insert examples/realdata/FY09_EDU_Recipients_by_State.csv
برای جدولهای بزرگ ممکن است پردازش کل جدول امکانپذیر نباشد. یک راهحل برای این مسئله، تحلیل نمونهای از جدول است. در این حالت، غیرفعال کردن محدودیتهای طول و بررسیهای null با استفاده از گزینه --no-constraints میتواند مفید باشد:
head -n 20 examples/realdata/FY09_EDU_Recipients_by_State.csv | csvsql --no-constraints --tables fy09
ایجاد جدولها برای تمام فایلهای CSV موجود در یک دایرکتوری و وارد کردن دادههای آن فایلها به طور مستقیم در PostgreSQL:
createdb test csvsql --db postgresql:///test --insert examples/*_converted.csv
اگر آن فایلهای CSV سربرگهای یکسانی داشته باشند، میتوانید ابتدا با استفاده از csvstack آنها را در یک جدول وارد کنید:
createdb test csvstack examples/dummy?.csv | csvsql --db postgresql:///test --insert
پرسوجو و خروجی گرفتن از فایلهای CSV با استفاده از SQL
میتوانید از csvsql برای پرسوجوی "مستقیم" روی یک یا چند فایل CSV استفاده کنید. لطفاً توجه داشته باشید که این کار یک پایگاه داده SQLite در حافظه ایجاد میکند، بنابراین چندان سریع نخواهد بود:
csvsql --query "SELECT m.usda_id, avg(i.sepal_length) AS mean_sepal_length FROM iris AS i JOIN irismeta AS m ON (i.species = m.species) GROUP BY m.species" examples/iris.csv examples/irismeta.csv
گروهبندی سطرها بر اساس یک ستون:
csvsql --query "SELECT * FROM 'dummy3' GROUP BY a" examples/dummy3.csv
الحاق دو ستون:
csvsql --query "SELECT a || b FROM 'dummy3'" --no-inference examples/dummy3.csv
اگر ستونی حاوی مقادیر null است، باید از COALESCE برای آن ستون استفاده کنید:
csvsql --query "SELECT a || COALESCE(b, '') FROM 'sort_ints_nulls'" --no-inference examples/sort_ints_nulls.csv
دستور SQL از نوع UPDATE هیچ خروجیای تولید نمیکند. به یاد داشته باشید که ستونها و سطرهای مورد نظر خود را با SELECT انتخاب کنید:
csvsql --query "UPDATE 'dummy3' SET a = 'foo'; SELECT * FROM 'dummy3'" examples/dummy3.csv
نویسندگان (AUTHORS)
Christopher Groskopf و مشارکتکنندگان
کپیرایت و تکثیر (COPYRIGHT)
2016, Christopher Groskopf and James McKinney
| August 16, 2024 | 2.2.0 |