Как прочитать локальный файл .sql в R [duplicate]

Да. Это правильное поведение и сравнение.

По крайней мере, в Python A and B возвращает B, если A по существу True, в том числе, если A NOT Null, NOT None НЕ пустой контейнер (например, пустой list, dict и т. Д.). A возвращается IFF A по существу False или None или Empty или Null.

С другой стороны, A or B возвращает A, если A по существу True, в том числе, если A НЕ НУЛЬНО, NOT None NOT Пустое контейнер (например, пустой list, dict и т. д.), в противном случае он возвращает B.

Легко не заметить (или игнорировать) это поведение, потому что в Python любой непустой объект non-null оценивается как True, обрабатывается как логическое.

Для Например, все следующие будут печатать «True»

if [102]: 
    print "True"
else: 
    print "False"

if "anything that is not empty or None": 
    print "True"
else: 
    print "False"

if {1, 2, 3}: 
    print "True"
else: 
    print "False"

С другой стороны, все следующие будут печатать «False»

if []: 
    print "True"
else: 
    print "False"

if "": 
    print "True"
else: 
    print "False"

if set ([]): 
    print "True"
else: 
    print "False"
3
задан strangeloop 20 April 2016 в 19:06
поделиться

3 ответа

в зависимости от того, что вы хотите извлечь из таблицы, вот как вы можете играть с данными

numLines <- R.utils::countLines("sportsdb_sample_mysql_20080303.sql")
# [1] 81266

linesInDB <- readLines("sportsdb_sample_mysql_20080303.sql",n=60)

. Затем вы можете сделать некоторое регулярное выражение для получения имен таблиц (после CREATE TABLE), имена столбцов (между первыми скобками) и VALUES (строки после CREATE TABLE и между вторыми скобками)

Ссылка: Обратное проектирование вывод mysqldump с MySQL Workbench дает оператор «quot», начинающийся с заостренной строки, содержит не UTF8 символы & Quot; error


EDIT: в ответ на ответ OP, если я правильно интерпретирую скрипт python, он также читает строку за строкой, фильтрует строки INSERT INTO, анализирует как csv, затем пишите в файл. Это очень похоже на мое первоначальное предложение. Моя версия ниже в R. Если размер файла слишком велик, было бы лучше прочитать в файле куски, используя другой R-пакет

options(stringsAsFactors=F)
library(utils)
library(stringi)
library(plyr)

mysqldumpfile <- "sportsdb_sample_mysql_20080303.sql"

allLines <- readLines(mysqldumpfile)
insertLines <- allLines[which(stri_detect_fixed(allLines, "INSERT INTO"))]
allwords <- data.frame(stri_extract_all_words(insertLines, " "))
d_ply(allwords, .(X3), function(x) {
    #x <- split(allwords, allwords$X3)[["baseball_offensive_stats"]]
    print(x[1,3])

    #find where the header/data columns start and end
    valuesCol <- which(x[1,]=="VALUES")
    lastCols <- which(apply(x, 2, function(y) all(is.na(y))))
    datLastCol <- head(c(lastCols, ncol(x)+1), 1) - 1

    #format and prepare for write to file
    df <- data.frame(x[,(valuesCol+1):datLastCol])
    df <- setNames(df, x[1,4:(valuesCol-1)])
    #type convert before writing to file otherwise its all strings
    df[] <- apply(df, 2, type.convert)
    #write to file
    write.csv(df, paste0(x[1,3],".csv"), row.names=F)
})
1
ответ дан chinsoon12 27 August 2018 в 15:40
поделиться

Я не думаю, что вы найдете способ импортировать дамп sql (который содержит несколько таблиц со ссылками), а затем выполнить произвольные SQL-запросы на них в пределах R. Это в основном требовало, чтобы пакет R запускал полный сервер базы данных (совместимый с тем, который создает дамп) в пределах R.

Я бы предложил экспортировать таблицы / select утверждения, которые вам нужны в CSV из вашей базы данных (см. здесь) . Если вы можете работать только с дампа и не хотите настраивать сервер для преобразования, вы можете использовать некоторые простые регулярные выражения, чтобы превратить операторы insert в ваш дамп в кучу CSV-файлов для таблиц, используя инструмент вы выбираете, как sed или awk (или даже R, как предложено другим ответом, но это может быть довольно медленным для этого размера файла).

1
ответ дан Community 27 August 2018 в 15:40
поделиться

Я неохотно отвечу на свой вопрос, используя вход из + bnord и + chinsoon12 (кто оба сделал кусочки головоломки).

Короткий ответ: нет решения из коробки. Как примечания + bnord, было бы желательно исправить его на стороне сервера (например, экспортируя в формат CSV с помощью mysqldump). Однако, как указывал мой вопрос, я ищу решение, которое позволяет мне работать с дампом sql, минуя сервер.

Итак, если нам нужно работать с дампом, как? Hardcore, ручной способ - использовать регулярные выражения для преобразования INSERT в CSV, либо (1) вне R, используя sed и awk в текстовом файле .sql (+ bnord), либо (2) внутри R с grep и gsub в строках, загруженных с помощью readLines (+ chinsoon12).

Некоторая хорошая душа написала скрипт python, который может конвертировать sql-дампы в CSV . Для этого требуется еще один кусок (потенциально нетривиальный для установки / поддержки) программного обеспечения, поэтому это не тот ответ, на который я надеялся, но он выглядит как хорошая модель, если кто-то хочет изобрести колесо в R.

На данный момент я придерживаюсь своего modus operandi (в Windows), на котором запущен MySQL Community Server, и используя WorkBench для импорта дампа, а затем поговорите с локальным сервером из R. Очень косвенный метод, который является болью в из-за непостижимой системы прав доступа MySQL (особенно раздражает, так как все это просто в текстовом файле ASCII), но единственный способ пока, похоже. Спасибо всем за ваш вклад!

(Если получится лучший, более полный ответ, я с радостью соглашусь с этим, если это возможно).

1
ответ дан strangeloop 27 August 2018 в 15:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: