Que faites-vous lorsque vous souhaitez extraire des données de base de données avec CSV? s'il vous plaît dites-moi à ce sujet si cela ne vous dérange pas! Je ressemble à ça ↓ ↓ ↓
Je souhaite convertir le résultat d'une demande d'extraction dans la base de données en écrivant une requête au format CSV.
Les analystes de données internes écrivent du SQL et créent des fichiers à analyser. Il est normal d'assembler avec Excel et de se connecter à ODBC, mais de toute façon, je veux simplement mettre les données dans le logiciel statistique. Je souhaite traiter la logique de calcul numérique et la logique de remplacement telles qu'elles sont du côté du logiciel d'analyse.
Il y a quelque chose appelé odbc qui sert d'intermédiaire à la connexion avec la base de données. Laissons les paramètres ODBC et ce qu'il faut faire aux autres sites. Si vous n'êtes pas celui qui configure vous-même la base de données, quelqu'un devrait l'utiliser, alors demandez. Pour le moment, il vous suffit de demander l'adresse IP du serveur de base de données et le pilote de connexion.
La méthode est un lien. Ici ou ODBC C'est aussi ODBC
Réglez "Nom de la source de données" au moment du réglage. Prenez-en note.
Vous pouvez installer R en le téléchargeant depuis CRAN, en l'installant et en tapant le script suivant dans l'éditeur R.
Supposons que vous ayez une table pleine de 6 millions d'enregistrements appelée user_log Il faut énormément de temps pour tout extraire avec un logiciel qui se connecte normalement à la base de données. Si d'autres personnes sont également connectées, il est essentiel que la charge du processeur sur le serveur devienne effrayante et que tout le monde se fâche.
Pour les logiciels qui se connectent à la base de données, j'aime → CSE. Cela peut également être connecté si le nom, l'ID et le passage de la source de données ODBC sont connus.
library(RODBC)
conn_DB <- odbcConnect("Nom de la source de données", "Identifiant attribué", "Pass qui sera délivré avec la pièce d'identité")
query <- paste0("select count(*) from user_log")
tbl <- sqlQuery(conn_DB, query)
odbcClose(conn_DB)
Tournez ceci avec une instruction FOR.
Vous pouvez d'abord vous connecter à la base de données ci-dessus pour voir le nombre de lignes de la table. Disons que vous pouvez confirmer qu'il est de 6 millions. Si vous essayez de tout retirer en même temps, le processeur du serveur cessera de penser, alors retirez-vous à petite échelle en divisant. Du côté du logiciel d'analyse également, il est possible que la mémoire devienne pleine, il est donc recommandé de l'écrire en détail et de la combiner à la fin.
SEQ<-seq(1,6000000,5000)
LIM<-length(SEQ)-1
conn_DB <- odbcConnect("Nom de la source de données", "Identifiant attribué", "Pass qui sera délivré avec la pièce d'identité")
for(i in 1:LIM){
query <- paste0(
"select * from user_log ",
"limit 5000 offset ",
as.numeric(SEQ[i])
)
tbl <- sqlQuery(conn_DB, query)
write.csv(tbl, paste0("this_is_",i,"th.csv"), row.names=F)
Sys.sleep(10)
}
odbcClose(conn_DB)
Avec cela, les données pourraient être extraites en les divisant en 5000 enregistrements. Vous pouvez combiner des requêtes écrites en SQL avec paste0. S'il existe un seul symbole de guillemet dans SQL, ajoutez-lui une barre oblique inverse.
where colum = '10'
where colum = \'10\'
Si vous combinez des caractères avec paste0, les sauts de ligne SQL peuvent disparaître, soyez donc prudent lors de l'écriture.
paste0("select * from user_log", "where colum = '10'")
select * from user_logwhere colum = '10'
C'est collé ensemble.
setwd("chemin du fichier qui crache csv")
lf <- list.files(pattern="csv")
data <- data.frame()
for(i in 1:length(lf)){
add <- fread(lf[i])
data <- rbind(data,add)
}
Cela mettra 6 millions de données en données. Veuillez noter que le traitement sera catastrophique si le PC ne dispose pas de suffisamment de mémoire.
N'est-il pas acceptable de rendre chaque csv équivalent à un mini-lot pour l'apprentissage automatique?
Puisque j'ai expliqué la politique dans une certaine mesure, j'omettrai l'explication à partir de maintenant.
import pyodbc
import numpy as np
import pandas as pd
cnx = pyodbc.connect('DSN=Nom de la source de données; UID=Entrer l'ID; PWD=Insérer une passe')
cursor = cnx.cursor()
list_for = np.arange(1,60000,5000)
list_for=list_for.tolist()
for i in range(len(list_for)):
made_que = "SELECT * FROM user_log " + "LIMIT 5000 OFFSET " + str(list_for[i])
cursor.execute(made_que)
tbl = cursor.fetchall()
array_format = np.array(tbl)
dataframe_format = pd.DataFrame(array_format)
dataframe_format.to_csv('csv_data/' + str(i) + '.csv')
Analyse de la production après extraction
Recommended Posts