Carga de dados em massa (CSV / a partir de arquivo)
Oracle
-- SQL*Loader (from the shell)
sqlldr app_user/password control=customer.ctl log=load.log
-- Contents of customer.ctl:
-- LOAD DATA INFILE 'customer.csv'
-- INTO TABLE customer FIELDS TERMINATED BY ','
-- (id, name, email)
-- Alternative: with an external table
CREATE TABLE ext_customer (id NUMBER, name VARCHAR2(100))
ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY dir_csv
ACCESS PARAMETERS (FIELDS TERMINATED BY ',') LOCATION ('customer.csv'));A ferramenta mais comum é o SQL*Loader (com um control file). Para ler o arquivo como uma consulta, use uma external table. Para grandes volumes, o direct path load (DIRECT=TRUE) é rápido.
PostgreSQL
-- Server side (file on the server; requires superuser/pg_read_server_files)
COPY customer (id, name, email) FROM '/data/customer.csv' WITH (FORMAT csv, HEADER true);
-- Client side (psql, file on the client)
\copy customer (id, name, email) FROM 'customer.csv' WITH (FORMAT csv, HEADER true)COPY lê um arquivo no servidor e exige privilégios; o \copy do psql lê um arquivo do cliente e não precisa de privilégios extras. É a forma mais rápida de carregar CSV.
MySQL
-- Server side
LOAD DATA INFILE '/data/customer.csv' INTO TABLE customer
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES;
-- From a client file
LOAD DATA LOCAL INFILE 'customer.csv' INTO TABLE customer
FIELDS TERMINATED BY ',' IGNORE 1 LINES;LOAD DATA INFILE é a forma mais rápida de carga em massa. LOCAL lê um arquivo do cliente e deve estar habilitado tanto no servidor (local_infile=ON) quanto no cliente. secure_file_priv restringe o caminho no servidor.
SQL Server
-- T-SQL BULK INSERT
BULK INSERT customer FROM 'C:\data\customer.csv'
WITH (FORMAT='CSV', FIRSTROW=2, FIELDTERMINATOR=',', ROWTERMINATOR='0x0a');
-- bcp from the shell
bcp mydb.dbo.customer in customer.csv -c -t, -S server -TBULK INSERT lê o arquivo de um caminho acessível à conta de serviço do SQL Server. bcp é uma ferramenta de linha de comando; -c é o modo caractere, -t o terminador de campo. Para máxima velocidade, busque minimal logging com TABLOCK.
MongoDB
# Import CSV / JSON (from the shell)
mongoimport --db=shop --collection=customer --type=csv --headerline --file=customer.csv
# For a JSON array
mongoimport --db=shop --collection=customer --file=customer.json --jsonArraymongoimport carrega CSV/TSV/JSON; --headerline trata a primeira linha como nomes de campos. Para atualizar documentos existentes, use --mode=upsert --upsertFields. Para grandes volumes, --numInsertionWorkers acelera o processo.
Redis
# Fastest: feed commands in protocol format and pipe them
cat commands.txt | redis-cli --pipe
# Example lines in commands.txt:
# SET customer:1 "Alice"
# SET customer:2 "Bob"Para carga em massa, use redis-cli --pipe (mass insert); é muito rápido porque transmite os comandos no formato do protocolo RESP por uma única conexão. Como alternativa, os comandos são agrupados com pipelining.
Elasticsearch
# _bulk API (NDJSON: an action line + a source line per document)
curl -s -H 'Content-Type: application/x-ndjson' -XPOST 'localhost:9200/customer/_bulk' --data-binary @data.ndjson
# Contents of data.ndjson:
# { "index": {} }
# { "id": 1, "name": "Alice" }
# { "index": {} }
# { "id": 2, "name": "Bob" }A API _bulk recebe NDJSON (uma linha de ação + uma linha de dados por documento; o arquivo deve terminar com \n). Para CSV, use Logstash, Filebeat ou elasticdump. Desativar o refresh_interval durante a carga acelera o processo.