ToolDeck

CSV থেকে SQL

CSV ডেটা থেকে SQL INSERT স্টেটমেন্ট তৈরি করুন

একটি উদাহরণ চেষ্টা করুন

CSV ইনপুট

SQL আউটপুট

স্থানীয়ভাবে চলে · গোপন তথ্য পেস্ট করা নিরাপদ
এখানে SQL দেখা যাবে…
টেবিলের নাম:

CSV থেকে SQL রূপান্তর কী?

CSV থেকে SQL রূপান্তর কমা-বিভক্ত মানগুলিকে Structured Query Language স্টেটমেন্টে রূপান্তরিত করে, যা একটি রিলেশনাল ডেটাবেসে চালানো যায়। সবচেয়ে সাধারণ আউটপুট হলো দুটি অংশ: একটি CREATE TABLE স্টেটমেন্ট যা কলামগুলি নির্ধারণ করে, এবং এক বা একাধিক INSERT INTO স্টেটমেন্ট যা CSV ফাইলের সারিগুলি দিয়ে সেই কলামগুলি পূরণ করে।

CSV ফাইলগুলি RFC 4180 স্পেসিফিকেশন অনুসরণ করে। প্রতিটি লাইন একটি রেকর্ড, ক্ষেত্রগুলি একটি বিভাজক দিয়ে আলাদা করা হয় (সাধারণত কমা), এবং বিভাজক বা নতুন লাইন ধারণকারী ক্ষেত্রগুলি ডাবল কোটে রাখা হয়। অন্যদিকে, SQL হলো PostgreSQL, MySQL, SQLite ও SQL Server-এর মতো সিস্টেমে ডেটা পরিচালনার মানক ভাষা। এই দুটি ফরম্যাটের মধ্যে রূপান্তর সফটওয়্যার ডেভেলপমেন্টে সবচেয়ে কমন ডেটা ইম্পোর্ট কাজগুলির মধ্যে একটি।

একটি সঠিক CSV-থেকে-SQL কনভার্টার উদ্ধৃতি পরিচালনা করে, মানের মধ্যে একক উদ্ধৃতি এস্কেপ করে (SQL মান অনুযায়ী '' করে দ্বিগুণ করে), কলাম শিরোনামগুলিকে বৈধ SQL শনাক্তকারীতে ম্যাপ করে এবং ঐচ্ছিকভাবে ডেটার ধরন অনুমান করতে পারে। মৌলিক এস্কেপিংয়ের বাইরে, একটি ভালো কনভার্টার শিরোনামের নামগুলি স্বাভাবিক করে (স্পেস ও হাইফেন আন্ডারস্কোর দিয়ে প্রতিস্থাপন করে) এবং আউটপুটকে একটি ট্রানজ্যাকশন ব্লকে মোড়ায়, যাতে আমদানি ব্যর্থ হলে টেবিলে আংশিক ডেটা না রেখে পরিষ্কারভাবে রোলব্যাক হয়। কনভার্টার ছাড়া, কয়েকশত সারির জন্যও হাতে INSERT স্টেটমেন্ট লেখা ত্রুটিপ্রবণ ও ধীর।

CSV থেকে SQL কনভার্টার কেন ব্যবহার করবেন?

স্প্রেডশিট ডেটা থেকে হাতে SQL INSERT স্টেটমেন্ট লেখা ক্লান্তিকর এবং সিনট্যাক্স ত্রুটি ডেকে আনে। একটি কনভার্টার পুনরাবৃত্তিমূলক অংশগুলি স্বয়ংক্রিয় করে যাতে আপনি স্কিমা ডিজাইন ও ডেটা যাচাইয়ে মনোযোগ দিতে পারেন।

সেকেন্ডে SQL তৈরি করুন
আপনার CSV পেস্ট করুন, চালানোর জন্য প্রস্তুত SQL আউটপুট পান। স্ট্রিং উদ্ধৃত করতে, অ্যাপোস্ট্রফি এস্কেপ করতে বা কলাম গণনা করতে হবে না। রূপান্তর সম্পূর্ণ আপনার ব্রাউজারে চলে।
🔒
ডেটা আপনার কাছেই থাকে
আপনার CSV কখনো আপনার মেশিন ছেড়ে যায় না। সমস্ত পার্সিং ও SQL তৈরি ক্লায়েন্ট-সাইডে হয়, অর্থাৎ কোনো সার্ভার আপলোড নেই, কোনো লগিং নেই এবং আপনার ডেটাসেটে তৃতীয় পক্ষের কোনো প্রবেশাধিকার নেই।
🎯
সঠিক SQL সিনট্যাক্স তৈরি করুন
মানের মধ্যে একক উদ্ধৃতি SQL মান অনুযায়ী '' হিসেবে এস্কেপ করা হয়। কলামের নামগুলি বৈধ শনাক্তকারীতে পরিষ্কার করা হয়। আউটপুট PostgreSQL, MySQL ও SQLite-এর জন্য সিনট্যাক্স সঠিক।
📋
যেকোনো CSV কাঠামো পরিচালনা করুন
টুলটি স্বয়ংক্রিয়ভাবে বিভাজক শনাক্ত করে (কমা, সেমিকোলন, ট্যাব, পাইপ) এবং RFC 4180 নিয়ম অনুসরণ করে এমবেডেড কমা বা নতুন লাইনসহ উদ্ধৃত ক্ষেত্রগুলি পরিচালনা করে।

CSV থেকে SQL-এর ব্যবহারের ক্ষেত্র

ডেটাবেস সিডিং
ডেভেলপমেন্ট বা স্টেজিং ডেটাবেসের জন্য একটি CSV ফিক্সচার ফাইলকে INSERT স্টেটমেন্টে রূপান্তর করুন। CI পাইপলাইনে কার্যকর যেখানে ORM ছাড়া পুনরাবৃত্তিযোগ্য সিড ডেটা প্রয়োজন।
ডেটা মাইগ্রেশন
একটি সিস্টেম থেকে রপ্তানি করা ডেটা (CRM, স্প্রেডশিট, পুরনো অ্যাপ) নতুন রিলেশনাল ডেটাবেসে সরান। SQL তৈরি করুন, পর্যালোচনা করুন, তারপর একটি ট্রানজ্যাকশনে চালান।
ব্যাকএন্ড API ডেভেলপমেন্ট
CSV থেকে পরীক্ষামূলক ডেটা দিয়ে দ্রুত একটি স্থানীয় PostgreSQL বা MySQL ইনস্ট্যান্স পূরণ করুন। যখন শুধু একবার লোড করতে হয় তখন মাইগ্রেশন স্ক্রিপ্ট লেখার চেয়ে দ্রুত।
QA ও পরীক্ষা স্বয়ংক্রিয়করণ
ইন্টিগ্রেশন পরীক্ষার আগে ডেটাবেস অবস্থা সেট আপ করতে CSV পরীক্ষা ফিক্সচার থেকে SQL তৈরি করুন। পরীক্ষা রানের মধ্যে টেবিল রিসেট করতে একটি টিয়ারডাউন স্ক্রিপ্টের সাথে যুক্ত করুন।
ডেটা বিশ্লেষণ প্রস্তুতি
অ্যাড-হক কোয়েরির জন্য SQLite-এ CSV ডেটাসেট লোড করুন। SQLite সরাসরি SQL INSERT স্টেটমেন্ট পড়ে, স্প্রেডশিট রপ্তানি থেকে কোয়েরিযোগ্য ডেটায় দ্রুত পথ তৈরি করে।
SQL শেখা
শিক্ষার্থীরা স্ক্র্যাচ থেকে স্কিমা সেট আপ না করে বাস্তবসম্মত ডেটায় SELECT, JOIN ও অ্যাগ্রিগেট কোয়েরি অনুশীলন করতে নমুনা CSV-গুলি SQL-এ রূপান্তর করতে পারে।

SQL ডেটা টাইপ রেফারেন্স

CSV থেকে SQL-এ রূপান্তর করার সময়, প্রতিটি কলাম TEXT-এ ডিফল্ট হয় কারণ CSV-এ কোনো টাইপ মেটাডেটা নেই। আপনি যদি কলামের ধরন জানেন, তাহলে CREATE TABLE আউটপুটে TEXT প্রতিস্থাপন করতে পারেন। এই টেবিলটি সবচেয়ে সাধারণ SQL টাইপ এবং কখন প্রতিটি ব্যবহার করবেন তা দেখায়।

টাইপব্যবহৃত হয়নোট
TEXT / VARCHARStrings, mixed contentDefault safe choice; works in every SQL dialect
INTEGER / INTWhole numbers (age, count, ID)Use when column contains only digits with no decimals
REAL / FLOATDecimal numbers (price, rate)Needed for columns with dots like 19.99 or 3.14
DATEISO 8601 dates (2024-01-15)Requires consistent formatting; varies by database
BOOLEANtrue/false, 1/0, yes/noMySQL uses TINYINT(1); PostgreSQL has native BOOL
NUMERIC / DECIMALExact precision (currency)Specify scale: DECIMAL(10,2) for money columns
BLOB / BYTEABinary dataRarely needed in CSV imports; use for hex-encoded fields

SQL ডায়ালেক্ট তুলনা

SQL সিনট্যাক্স বিভিন্ন ডেটাবেস ইঞ্জিনের মধ্যে ভিন্ন হয়। তৈরি INSERT স্টেটমেন্টগুলি মানক SQL ব্যবহার করে যা বেশিরভাগ সিস্টেমে কাজ করে, তবে কিছু বৈশিষ্ট্য আলাদা। এই টেবিলটি CSV ডেটা আমদানি করার সময় সবচেয়ে গুরুত্বপূর্ণ পার্থক্যগুলি সংক্ষিপ্ত করে।

বৈশিষ্ট্যPostgreSQLMySQLSQLiteSQL Server
Identifier quoting"col"`col`"col"[col]
String escape'''' or \'''''
INSERT syntaxINSERT INTOINSERT INTOINSERT INTOINSERT INTO
Batch INSERTVALUES (),()…VALUES (),()…VALUES (),()…max 1000 rows
Auto-incrementSERIALAUTO_INCREMENTAUTOINCREMENTIDENTITY(1,1)
Upsert / mergeON CONFLICTON DUPLICATE KEYON CONFLICTMERGE
NULL handlingIS NULLIS NULL / <=>IS NULLIS NULL
COPY from CSVCOPY … FROMLOAD DATA INFILE.importBULK INSERT

INSERT বনাম COPY: আমদানি পদ্ধতি বেছে নেওয়া

ছোট থেকে মাঝারি ডেটাসেটের জন্য (১০,০০০ সারির কম), INSERT স্টেটমেন্টগুলি ভালোভাবে কাজ করে এবং প্রতিটি SQL ডেটাবেসে বহনযোগ্য। বড় আমদানির জন্য, ডেটাবেসগুলি বাল্ক-লোডিং কমান্ড সরবরাহ করে যা সম্পূর্ণরূপে SQL পার্সার বাইপাস করে।

INSERT INTO
মানক SQL। সর্বত্র কাজ করে। প্রতিটি সারি একটি SQL স্টেটমেন্ট হিসেবে পার্স করা হয়, তাই বড় ডেটাসেটের জন্য ওভারহেড বেশি। শর্তসাপেক্ষ লজিক সমর্থন করে (ON CONFLICT, ON DUPLICATE KEY)। সিড ডেটা, ছোট মাইগ্রেশন এবং যেখানে সারি-স্তরের নিয়ন্ত্রণ প্রয়োজন তার জন্য সেরা।
COPY / LOAD DATA
ডেটাবেস-নির্দিষ্ট বাল্ক লোডার। PostgreSQL COPY ব্যবহার করে, MySQL LOAD DATA INFILE ব্যবহার করে, SQLite .import ব্যবহার করে এবং SQL Server BULK INSERT ব্যবহার করে। SQL পার্সার এড়িয়ে সরাসরি CSV পড়ে। বড় ফাইলের জন্য (১ লাখ+ সারি) ১০-১০০ গুণ দ্রুত। সার্ভার বা ক্লায়েন্টে ফাইল সিস্টেম অ্যাক্সেস প্রয়োজন।

কোড উদাহরণ

এই উদাহরণগুলি দেখায় কীভাবে বিভিন্ন ভাষায় CSV-কে SQL INSERT স্টেটমেন্টে রূপান্তর করতে হয়। প্রতিটি একক উদ্ধৃতি এস্কেপিং ও কলামের নাম পরিষ্করণ পরিচালনা করে।

JavaScript (Node.js)
// CSV → SQL INSERT statements
const csv = `name,age,city
Alice,30,Berlin
Bob,25,Tokyo`

function csvToSql(csv, table = 'data') {
  const rows = csv.trim().split('\n').map(r => r.split(','))
  const [headers, ...data] = rows
  const cols = headers.map(h => h.trim().toLowerCase().replace(/\s+/g, '_'))

  const values = data.map(row =>
    '  (' + row.map(v => `'${v.replace(/'/g, "''").trim()}'`).join(', ') + ')'
  )

  return `INSERT INTO ${table} (${cols.join(', ')}) VALUES
${values.join(',\n')};`
}

console.log(csvToSql(csv, 'users'))
// → INSERT INTO users (name, age, city) VALUES
//     ('Alice', '30', 'Berlin'),
//     ('Bob', '25', 'Tokyo');
Python
import csv
import io

csv_string = """name,age,city
Alice,30,Berlin
Bob,25,Tokyo"""

reader = csv.reader(io.StringIO(csv_string))
headers = [h.strip().lower().replace(' ', '_') for h in next(reader)]

table = 'users'
rows = list(reader)

# CREATE TABLE
col_defs = ', '.join(f'{h} TEXT' for h in headers)
print(f'CREATE TABLE {table} ({col_defs});')
# → CREATE TABLE users (name TEXT, age TEXT, city TEXT);

# INSERT statements
for row in rows:
    vals = ', '.join(f"'{v.replace(chr(39), chr(39)*2)}'" for v in row)
    print(f"INSERT INTO {table} ({', '.join(headers)}) VALUES ({vals});")
# → INSERT INTO users (name, age, city) VALUES ('Alice', '30', 'Berlin');
# → INSERT INTO users (name, age, city) VALUES ('Bob', '25', 'Tokyo');
Go
package main

import (
	"encoding/csv"
	"fmt"
	"strings"
)

func csvToSQL(data, table string) string {
	r := csv.NewReader(strings.NewReader(data))
	records, _ := r.ReadAll()
	if len(records) < 2 {
		return ""
	}

	headers := records[0]
	var vals []string
	for _, row := range records[1:] {
		escaped := make([]string, len(row))
		for i, v := range row {
			escaped[i] = "'" + strings.ReplaceAll(v, "'", "''") + "'"
		}
		vals = append(vals, "  ("+strings.Join(escaped, ", ")+")")
	}

	return fmt.Sprintf("INSERT INTO %s (%s) VALUES\n%s;",
		table, strings.Join(headers, ", "), strings.Join(vals, ",\n"))
}

func main() {
	csv := "name,age,city\nAlice,30,Berlin\nBob,25,Tokyo"
	fmt.Println(csvToSQL(csv, "users"))
	// → INSERT INTO users (name, age, city) VALUES
	//     ('Alice', '30', 'Berlin'),
	//     ('Bob', '25', 'Tokyo');
}
CLI (sqlite3 / psql)
# SQLite: import CSV directly into a table
sqlite3 mydb.db <<EOF
.mode csv
.import data.csv users
SELECT * FROM users LIMIT 5;
EOF

# PostgreSQL: COPY from CSV file (server-side)
psql -c "COPY users FROM '/path/to/data.csv' WITH (FORMAT csv, HEADER true);"

# PostgreSQL: \copy from CSV (client-side, no superuser needed)
psql -c "\copy users FROM 'data.csv' WITH (FORMAT csv, HEADER true);"

# MySQL: LOAD DATA from CSV
mysql -e "LOAD DATA INFILE '/path/to/data.csv' INTO TABLE users
  FIELDS TERMINATED BY ',' ENCLOSED BY '"'
  LINES TERMINATED BY '\n' IGNORE 1 ROWS;"

সাধারণত জিজ্ঞাসিত প্রশ্ন

CSV ডেটায় একক উদ্ধৃতি SQL আউটপুটে কীভাবে পরিচালিত হয়?
CSV মানে প্রতিটি একক উদ্ধৃতি (') SQL আউটপুটে '' করে দ্বিগুণ করা হয়। এটি SQL মানক এস্কেপ সিকোয়েন্স। উদাহরণস্বরূপ, "O'Brien"-এর মতো একটি মান INSERT স্টেটমেন্টে 'O''Brien' হয়। এটি PostgreSQL, MySQL, SQLite ও SQL Server-এ কাজ করে।
আমি কি MySQL বা PostgreSQL-এর মতো নির্দিষ্ট ডেটাবেসের জন্য CSV থেকে SQL রূপান্তর করতে পারি?
তৈরি INSERT স্টেটমেন্টগুলি মানক SQL সিনট্যাক্স ব্যবহার করে যা MySQL ও PostgreSQL উভয়ই গ্রহণ করে। মূল পার্থক্য হলো শনাক্তকারী উদ্ধৃতি: PostgreSQL দ্বি-উদ্ধৃতি ব্যবহার করে, MySQL ব্যাকটিক ব্যবহার করে। মৌলিক INSERT অপারেশনের জন্য, আউটপুট কোনো পরিবর্তন ছাড়াই যেকোনোটিতে কাজ করে।
আমার CSV-এ যদি কোনো শিরোনাম সারি না থাকে তাহলে কী হবে?
কনভার্টার প্রথম সারিকে কলাম শিরোনাম হিসেবে বিবেচনা করে। আপনার CSV-এ শিরোনাম না থাকলে, রূপান্তরের আগে একটি শিরোনাম সারি যোগ করুন, অন্যথায় প্রথম ডেটা সারিটি CREATE TABLE স্টেটমেন্টে কলামের নাম হয়ে যাবে। এই কনভার্টারসহ বেশিরভাগ কনভার্টারে একটি শিরোনাম সারি প্রয়োজন।
CSV থেকে SQL রূপান্তরের জন্য কি সারি সীমা আছে?
যেহেতু রূপান্তর আপনার ব্রাউজারে চলে, ব্যবহারিক সীমা আপনার ডিভাইসের মেমোরির উপর নির্ভর করে। দশ হাজার সারিসহ ফাইলগুলি কোনো সমস্যা ছাড়াই রূপান্তরিত হয়। খুব বড় ফাইলের জন্য (৫ লাখ+ সারি), INSERT স্টেটমেন্টের পরিবর্তে ডেটাবেসের নেটিভ COPY বা LOAD DATA কমান্ড ব্যবহার করার কথা বিবেচনা করুন।
আউটপুট INTEGER বা DATE-এর পরিবর্তে সমস্ত কলামের জন্য TEXT ব্যবহার করে কেন?
CSV হলো কোনো টাইপ মেটাডেটা ছাড়া একটি সাধারণ টেক্সট ফরম্যাট। ভুল টাইপ অনুমান এড়াতে কনভার্টার TEXT কে নিরাপদ ডিফল্ট হিসেবে ব্যবহার করে। আপনার ডেটা পর্যালোচনার পরে তৈরি CREATE TABLE স্টেটমেন্টে কলামের ধরন পরিবর্তন করতে পারেন। সংখ্যাসূচক কলামের জন্য INTEGER এবং তারিখ কলামের জন্য DATE সাধারণ সমন্বয়।
বিভাজক হিসেবে সেমিকোলন বা ট্যাব সহ CSV ফাইলগুলি কীভাবে পরিচালনা করব?
এই টুলটি আপনার CSV-এর প্রথম সারি বিশ্লেষণ করে স্বয়ংক্রিয়ভাবে বিভাজক শনাক্ত করে। এটি কমা, সেমিকোলন, ট্যাব ও পাইপ অক্ষর পরীক্ষা করে, তারপর যেটি সবচেয়ে বেশি দেখা যায় সেটি ব্যবহার করে। সেমিকোলন ব্যবহার করা ইউরোপীয়-ফরম্যাটের CSV-গুলি কোনো কনফিগারেশন পরিবর্তন ছাড়াই কাজ করে।
সরাসরি চালালে তৈরি SQL কি ইনজেকশন থেকে নিরাপদ?
আউটপুট একক উদ্ধৃতি এস্কেপ করে, যা আকস্মিক সিনট্যাক্স ত্রুটি রোধ করে। তবে, আপনার CSV ডেটা যদি অবিশ্বস্ত উৎস থেকে আসে, তাহলে তৈরি SQL-কে যেকোনো অবিশ্বস্ত ইনপুটের মতো বিবেচনা করুন। প্রোডাকশন ডেটাবেসের বিরুদ্ধে চালানোর আগে আউটপুট পর্যালোচনা করুন। প্রোগ্রামগত আমদানির জন্য, প্যারামিটারাইজড কোয়েরি সর্বদা স্ট্রিং সংযোজনের চেয়ে নিরাপদ।