আমি কীভাবে কোনও সঞ্চিত প্রক্রিয়া লিখতে পারি যা একটি CSV ফাইল থেকে ডেটা আমদানি করে এবং টেবিলটি জনপ্রিয় করে তোলে?
আমি কীভাবে কোনও সঞ্চিত প্রক্রিয়া লিখতে পারি যা একটি CSV ফাইল থেকে ডেটা আমদানি করে এবং টেবিলটি জনপ্রিয় করে তোলে?
উত্তর:
এই সংক্ষিপ্ত নিবন্ধটি একবার দেখুন ।
সমাধান প্যারাফ্রেসড এখানে:
আপনার টেবিলটি তৈরি করুন:
CREATE TABLE zip_codes
(ZIP char(5), LATITUDE double precision, LONGITUDE double precision,
CITY varchar, STATE char(2), COUNTY varchar, ZIP_CLASS varchar);
আপনার সিএসভি ফাইল থেকে টেবিলটি অনুলিপি করুন:
COPY zip_codes FROM '/path/to/csv/ZIP_CODES.txt' WITH (FORMAT csv);
COPY zip_codes FROM '/path/to/csv/ZIP_CODES.txt' DELIMITER ',' CSV HEADER;
postgresql.org/docs/9.1/static/sql-copy.html
যদি আপনার ব্যবহারের অনুমতি না থাকে COPY
(যা ডিবি সার্ভারে কাজ করে) তবে আপনি এর \copy
পরিবর্তে (যা ডিবি ক্লায়েন্টে কাজ করে) ব্যবহার করতে পারেন । বোজিদার বাতসভের মতো একই উদাহরণ ব্যবহার করে:
আপনার টেবিলটি তৈরি করুন:
CREATE TABLE zip_codes
(ZIP char(5), LATITUDE double precision, LONGITUDE double precision,
CITY varchar, STATE char(2), COUNTY varchar, ZIP_CLASS varchar);
আপনার সিএসভি ফাইল থেকে টেবিলটি অনুলিপি করুন:
\copy zip_codes FROM '/path/to/csv/ZIP_CODES.txt' DELIMITER ',' CSV
আপনি কলামগুলি পড়ার জন্য নির্দিষ্ট করতে পারেন:
\copy zip_codes(ZIP,CITY,STATE) FROM '/path/to/csv/ZIP_CODES.txt' DELIMITER ',' CSV
কপির জন্য ডকুমেন্টেশন দেখুন :
পিএসকিএল নির্দেশ-কপি দিয়ে কপি বিভ্রান্ত করবেন না। \ অনুলিপি এসটিডিন থেকে অনুলিপি বা স্টিপিতে অনুলিপি করে এবং তারপরে পিএসএইচএল ক্লায়েন্টের অ্যাক্সেসযোগ্য কোনও ফাইলে ডেটা সংগ্রহ / সঞ্চয় করে। সুতরাং, ফাইল অ্যাক্সেসযোগ্যতা এবং অ্যাক্সেসের অধিকারগুলি যখন \ অনুলিপি ব্যবহার করা হয় তখন সার্ভারের চেয়ে ক্লায়েন্টের উপর নির্ভর করে।
এবং দ্রষ্টব্য:
পরিচয় কলামগুলির জন্য, কপি FROM কমান্ড সর্বদা ইনপুট ডেটাতে প্রদত্ত কলামের মানগুলি INSERT বিকল্প ওভাররিডিং সিস্টেম ভ্যালুয়ের মতো লিখবে।
COPY
এবং\copy
কেবলমাত্র অনুমতিগুলির চেয়ে অনেক বেশি এবং এটিকে যাদুকরীভাবে কাজ করতে আপনি কেবল একটি add add যোগ করতে পারবেন না। : বর্ণনা (রপ্তানি প্রেক্ষাপটে) এখানে দেখুন stackoverflow.com/a/1517692/157957
এটি করার একটি দ্রুত উপায় হল পাইথন পান্ডাস লাইব্রেরি (0.15 বা তার বেশি সংস্করণটি সেরা কাজ করে)। এটি আপনার জন্য কলামগুলি তৈরি করা পরিচালনা করবে - যদিও স্পষ্টতই এটি ডেটা টাইপের জন্য পছন্দগুলি আপনার পছন্দসই নাও হতে পারে। যদি এটি আপনি যা চান তা পুরোপুরি না করে আপনি সর্বদা একটি টেম্পলেট হিসাবে উত্পন্ন 'টেবিল তৈরি করুন' কোডটি ব্যবহার করতে পারেন।
এখানে একটি সাধারণ উদাহরণ:
import pandas as pd
df = pd.read_csv('mypath.csv')
df.columns = [c.lower() for c in df.columns] #postgres doesn't like capitals or spaces
from sqlalchemy import create_engine
engine = create_engine('postgresql://username:password@localhost:5432/dbname')
df.to_sql("my_table_name", engine)
এবং এখানে কিছু কোড যা আপনাকে দেখায় যে কীভাবে বিভিন্ন বিকল্প সেট করতে হবে:
# Set it so the raw sql output is logged
import logging
logging.basicConfig()
logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)
df.to_sql("my_table_name2",
engine,
if_exists="append", #options are ‘fail’, ‘replace’, ‘append’, default ‘fail’
index=False, #Do not output the index of the dataframe
dtype={'col1': sqlalchemy.types.NUMERIC,
'col2': sqlalchemy.types.String}) #Datatypes should be [sqlalchemy types][1]
if_exists
প্যারামিটারটি বিদ্যমান সারণীতে প্রতিস্থাপন বা সংযোজন করার জন্য সেট করা যেতে পারে, যেমনdf.to_sql("fhrs", engine, if_exists='replace')
df.to_sql()
সত্যিই ধীর হয়, তাহলে আপনি ব্যবহার করতে পারেন d6tstack.utils.pd_to_psql()
থেকে d6tstack দেখুন কর্মক্ষমতা তুলনা
আপনি পিজএডমিনও ব্যবহার করতে পারেন যা আমদানি করার জন্য জিইউআই সরবরাহ করে। এটি এই সুতোয় দেখানো হয়েছে । পিজএডমিন ব্যবহারের সুবিধা হ'ল এটি দূরবর্তী ডাটাবেসের জন্যও কাজ করে।
যদিও পূর্ববর্তী সমাধানগুলির মতো, আপনার ডাটাবেসে আপনার টেবিলটি ইতিমধ্যে থাকা দরকার। প্রতিটি ব্যক্তির নিজস্ব সমাধান রয়েছে তবে আমি সাধারণত যা করি তা হ'ল এক্সেলে সিএসভি খুলুন, শিরোনামগুলি অনুলিপি করুন, আলাদা ওয়ার্কশিটে ট্রান্সপ্লোজেশন সহ বিশেষ পেস্ট করুন, পরবর্তী কলামে সম্পর্কিত ডেটা টাইপ করুন তারপরে কেবল অনুলিপি করুন এবং এটি একটি পাঠ্য সম্পাদককে পেস্ট করুন is একসাথে যথাযথ এসকিউএল সারণী তৈরি ক্যোয়ারী এর সাথে:
CREATE TABLE my_table (
/*paste data from Excel here for example ... */
col_1 bigint,
col_2 bigint,
/* ... */
col_n bigint
)
এখানে অন্যান্য বেশিরভাগ সমাধানের জন্য আপনাকে আগে থেকে / ম্যানুয়ালি টেবিল তৈরি করতে হবে। এটি কিছু ক্ষেত্রে ব্যবহারিক নাও হতে পারে (যেমন, গন্তব্য সারণীতে যদি আপনার প্রচুর কলাম থাকে)। সুতরাং, নীচের পদ্ধতিটি কার্যকর হতে পারে।
আপনার সিএসভি ফাইলের পথ এবং কলামের গণনা সরবরাহ করে, আপনি আপনার টেবিলটি কোনও টেম্প টেবিলটিতে লোড করতে নীচের ফাংশনটি ব্যবহার করতে পারেন যা নাম হিসাবে চিহ্নিত করা হবে target_table
:
শীর্ষ সারিতে কলামের নাম রয়েছে বলে ধরে নেওয়া হয়।
create or replace function data.load_csv_file
(
target_table text,
csv_path text,
col_count integer
)
returns void as $$
declare
iter integer; -- dummy integer to iterate columns with
col text; -- variable to keep the column name at each iteration
col_first text; -- first column name, e.g., top left corner on a csv file or spreadsheet
begin
create table temp_table ();
-- add just enough number of columns
for iter in 1..col_count
loop
execute format('alter table temp_table add column col_%s text;', iter);
end loop;
-- copy the data from csv file
execute format('copy temp_table from %L with delimiter '','' quote ''"'' csv ', csv_path);
iter := 1;
col_first := (select col_1 from temp_table limit 1);
-- update the column names based on the first row which has the column names
for col in execute format('select unnest(string_to_array(trim(temp_table::text, ''()''), '','')) from temp_table where col_1 = %L', col_first)
loop
execute format('alter table temp_table rename column col_%s to %s', iter, col);
iter := iter + 1;
end loop;
-- delete the columns row
execute format('delete from temp_table where %s = %L', col_first, col_first);
-- change the temp table name to the name given as parameter, if not blank
if length(target_table) > 0 then
execute format('alter table temp_table rename to %I', target_table);
end if;
end;
$$ language plpgsql;
public
)
পল যেমন উল্লেখ করেছেন, আমদানি পিজিএডমিনে কাজ করে:
টেবিল -> আমদানিতে ডান ক্লিক করুন
স্থানীয় ফাইল, ফর্ম্যাট এবং কোডিং নির্বাচন করুন
এখানে একটি জার্মান পিজএডমিন জিইউআই স্ক্রিনশট রয়েছে:
আপনি ডিবিভিউসুয়ালাইজারের সাথে একই জিনিস করতে পারেন (আমার কাছে লাইসেন্স আছে, বিনামূল্যে সংস্করণ সম্পর্কে নিশ্চিত নন)
একটি টেবিলের উপর ডান ক্লিক করুন -> সারণী ডেটা আমদানি করুন ...
প্রথমে একটি টেবিল তৈরি করুন
তারপরে টেবিলের বিশদটি অনুলিপি করতে কপি কমান্ডটি ব্যবহার করুন:
কপি TABLE_NAME (গ 1, C2, C3 ....)
থেকে বিভেদক ',' CSV হেডার 'পথ আপনার CSV ফাইলে';
ধন্যবাদ
এই এসকিউএল কোডটি ব্যবহার করুন
copy table_name(atribute1,attribute2,attribute3...)
from 'E:\test.csv' delimiter ',' csv header
শিরোনাম কীওয়ার্ডটি ডিবিএমএসকে জানতে দেয় যে সিএসভি ফাইলটিতে গুণাবলী সহ একটি শিরোনাম রয়েছে
আরও ভিজিটের জন্য http://www.postgresql
পোস্টগ্রিসএসকিউএল সহ ব্যক্তিগত অভিজ্ঞতা, এখনও দ্রুততর পথের জন্য অপেক্ষা করছে।
1. ফাইলটি স্থানীয়ভাবে সংরক্ষণ করা থাকলে প্রথমে টেবিলের কঙ্কাল তৈরি করুন:
drop table if exists ur_table;
CREATE TABLE ur_table
(
id serial NOT NULL,
log_id numeric,
proc_code numeric,
date timestamp,
qty int,
name varchar,
price money
);
COPY
ur_table(id, log_id, proc_code, date, qty, name, price)
FROM '\path\xxx.csv' DELIMITER ',' CSV HEADER;
২. যখন \ পাথ \ xxx.csv সার্ভারে থাকে, পোস্টগ্রিএসকিউএল-এর সার্ভারটি অ্যাক্সেস করার অনুমতি নেই, আপনাকে কার্যকারিতা দ্বারা নির্মিত পিজিএডমিনের মাধ্যমে .csv ফাইলটি আমদানি করতে হবে।
টেবিলের নামটি আমদানি চয়ন করতে ডান ক্লিক করুন।
আপনার যদি এখনও সমস্যা হয় তবে দয়া করে এই টিউটোরিয়ালটি দেখুন। http://www.postgresqltutorial.com/import-csv-file-into-posgresql-table/
কিভাবে পোস্টগ্রিএসকিউএল টেবিলের মধ্যে সিএসভি ফাইল ডেটা আমদানি করবেন?
ধাপ:
টার্মিনালে postgresql ডাটাবেস সংযোগ প্রয়োজন
psql -U postgres -h localhost
ডাটাবেস তৈরি করা দরকার
create database mydb;
ব্যবহারকারী তৈরি করা প্রয়োজন
create user siva with password 'mypass';
ডাটাবেসের সাথে সংযুক্ত হন
\c mydb;
স্কিমা তৈরি করা দরকার
create schema trip;
টেবিল তৈরি করা দরকার
create table trip.test(VendorID int,passenger_count int,trip_distance decimal,RatecodeID int,store_and_fwd_flag varchar,PULocationID int,DOLocationID int,payment_type decimal,fare_amount decimal,extra decimal,mta_tax decimal,tip_amount decimal,tolls_amount int,improvement_surcharge decimal,total_amount
);
Postgresql এ সিএসভি ফাইল ডেটা আমদানি করুন
COPY trip.test(VendorID int,passenger_count int,trip_distance decimal,RatecodeID int,store_and_fwd_flag varchar,PULocationID int,DOLocationID int,payment_type decimal,fare_amount decimal,extra decimal,mta_tax decimal,tip_amount decimal,tolls_amount int,improvement_surcharge decimal,total_amount) FROM '/home/Documents/trip.csv' DELIMITER ',' CSV HEADER;
প্রদত্ত টেবিলের ডেটা সন্ধান করুন
select * from trip.test;
আইএমএইচও, সবচেয়ে সুবিধাজনক উপায় হ'ল সিএসভিকিট থেকে সিএসভিএসকিএল ব্যবহার করে " পোস্টগ্রাএসকিএল , আরামদায়ক উপায় ;-) " এর মধ্যে সিএসভি ডেটা আমদানি করা , যা পাইপের মাধ্যমে ইনস্টলযোগ্য পাইথন প্যাকেজ।
পাইথনে, আপনি কলামের নাম সহ স্বয়ংক্রিয় পোস্টগ্রিগ এসকিউএল সারণী তৈরির জন্য এই কোডটি ব্যবহার করতে পারেন:
import pandas, csv
from io import StringIO
from sqlalchemy import create_engine
def psql_insert_copy(table, conn, keys, data_iter):
dbapi_conn = conn.connection
with dbapi_conn.cursor() as cur:
s_buf = StringIO()
writer = csv.writer(s_buf)
writer.writerows(data_iter)
s_buf.seek(0)
columns = ', '.join('"{}"'.format(k) for k in keys)
if table.schema:
table_name = '{}.{}'.format(table.schema, table.name)
else:
table_name = table.name
sql = 'COPY {} ({}) FROM STDIN WITH CSV'.format(table_name, columns)
cur.copy_expert(sql=sql, file=s_buf)
engine = create_engine('postgresql://user:password@localhost:5432/my_db')
df = pandas.read_csv("my.csv")
df.to_sql('my_table', engine, schema='my_schema', method=psql_insert_copy)
এটিও তুলনামূলক দ্রুত, আমি প্রায় 4 মিনিটে 3.3 মিলিয়ন সারি বেশি আমদানি করতে পারি।
আপনি পিজিফুটটার বা আরও ভাল, পিজিসিভিএস ব্যবহার করতে পারেন ।
পিজিফিউটারটি বেশ বগল, আমি পিজিএসভি'র ক্ষতিপূরণ দেব।
পিজিসিএসভি দিয়ে এটি কীভাবে করা যায় তা এখানে:
sudo pip install pgcsv
pgcsv --db 'postgresql://localhost/postgres?user=postgres&password=...' my_table my_file.csv
আপনার পাঠ্য / মাল্টিলাইন সিএসভি পার্স করে আমদানি করার জন্য যদি সহজ পদ্ধতির প্রয়োজন হয় তবে আপনি ব্যবহার করতে পারেন:
CREATE TABLE t -- OR INSERT INTO tab(col_names)
AS
SELECT
t.f[1] AS col1
,t.f[2]::int AS col2
,t.f[3]::date AS col3
,t.f[4] AS col4
FROM (
SELECT regexp_split_to_array(l, ',') AS f
FROM regexp_split_to_table(
$$a,1,2016-01-01,bbb
c,2,2018-01-01,ddd
e,3,2019-01-01,eee$$, '\n') AS l) t;
ডিবিভার সম্প্রদায় সংস্করণ (dbeaver.io) একটি ডাটাবেসের সাথে সংযোগ স্থাপনকে তুচ্ছ করে তোলে, তারপরে পোস্টগ্রিসএসকিউএল ডাটাবেসে আপলোড করার জন্য একটি সিএসভি ফাইল আমদানি করে। এটি সিএসভি, জেএসএন, এসকিউএল, বা অন্যান্য সাধারণ ডেটা ফর্ম্যাটগুলিতে প্রশ্নগুলি ইস্যু করা, ডেটা পুনরুদ্ধার করা এবং ফলাফল সেটগুলি ডাউনলোড করা সহজ করে তোলে।
এটি এসকিউএল প্রোগ্রামারস, ডিবিএ এবং বিশ্লেষকদের জন্য একটি ফসএস মাল্টি-প্ল্যাটফর্ম ডাটাবেস সরঞ্জাম যা সমস্ত জনপ্রিয় ডাটাবেসগুলিকে সমর্থন করে: মাইএসকিউএল, পোস্টগ্রিসকিউএল, এসকিউএলাইট, ওরাকল, ডিবি 2, এসকিউএল সার্ভার, সিবাস, এমএস অ্যাকসেস, টেরাদাতা, ফায়ারবার্ড, হাইভ, প্রেস্টো ইত্যাদি supports এটি পোস্টগ্রিসের জন্য টড, এসকিউএল সার্ভারের জন্য টয়ড, বা ওরাকলের জন্য টডের একটি কার্যকর টগবাল প্রতিযোগী।
ডিবিভারের সাথে আমার কোনও সম্পর্ক নেই। আমি দামটি (নিখরচায়!) এবং সম্পূর্ণ কার্যকারিতা পছন্দ করি, তবে আমি আশা করি তারা কেবল এই B 199 বার্ষিক সাবস্ক্রিপশনের জন্য অর্থ প্রদানের পরিবর্তে ডিবিভার / এক্সলিপসে বিশ্লেষণের উইজেটগুলি আরও সহজ করে এবং ডিবিভার / একলাইপসে আরও বিশ্লেষণ উইজেট যুক্ত করতে পারে I সরাসরি প্রয়োগের মধ্যে গ্রাফ এবং চার্ট তৈরি করতে। আমার জাভা কোডিং দক্ষতা মরিচা এবং আমি কীভাবে এক্লিপস উইজেটগুলি তৈরি করবেন তা শিখতে কয়েক সপ্তাহ লাগার মতো মনে হয় না, (কেবলমাত্র ডিবিভারটি সম্ভবত ডিবিভার কমিউনিটি সংস্করণে তৃতীয় পক্ষের উইজেটগুলি যুক্ত করার ক্ষমতা অক্ষম করে দিয়েছে))
জাভা বিকাশকারীরা ডিবিভার শক্তি ব্যবহারকারীরা কি ডিবিভারের সম্প্রদায় সংস্করণে যুক্ত করতে বিশ্লেষণ উইজেট তৈরি করার পদক্ষেপগুলি সম্পর্কে কিছুটা অন্তর্দৃষ্টি দিতে পারেন?
টেবিল তৈরি করুন এবং সিএসভি ফাইলে টেবিল তৈরি করার জন্য প্রয়োজনীয় কলামগুলি ব্যবহার করুন।
পোস্টগ্রেস খুলুন এবং টার্গেট সারণীতে ডান ক্লিক করুন যা আপনি লোড করতে এবং আমদানি নির্বাচন করতে চান এবং ফাইল বিকল্প বিভাগে নিম্নলিখিত পদক্ষেপগুলি আপডেট করুন
এখন আপনার ফাইলটি ফাইলনামে ব্রাউজ করুন
ফর্ম্যাটে সিএসভি নির্বাচন করুন
আইএসও_8859_5 হিসাবে এনকোডিং
এখন যাও মিস্ক । অপশন এবং চেক শিরোনাম এবং আমদানি ক্লিক করুন।
আমি একটি ছোট্ট সরঞ্জাম তৈরি করেছি যা csv
পোস্টগ্র্রেএসকিউএল সুপার ইজিতে ফাইল আমদানি করে , কেবল একটি কমান্ড এবং এটি টেবিলগুলি তৈরি এবং পপুলেট করবে, দুর্ভাগ্যক্রমে, এই মুহুর্তে স্বয়ংক্রিয়ভাবে তৈরি সমস্ত ক্ষেত্র প্রকারটি TEXT ব্যবহার করে
csv2pg users.csv -d ";" -H 192.168.99.100 -U postgres -B mydatabase
সরঞ্জামটি https://github.com/eduardonunesp/csv2pg এ পাওয়া যাবে
psql -h 192.168.99.100 -U postgres mydatabase -c "COPY users FROM 'users.csv' DELIMITER ';' CSV"
? টেবিলটি তৈরি করে এমন অংশটি আমি অনুমান করি যেহেতু এটি প্রতিটি ক্ষেত্রের পাঠ্য