2015-01-17 3 views
0

SQL을 배우고 있으며 다양한 개념을 이해하기 위해 몇 가지 샘플 데이터로 작업하려고합니다. 여기플랫 파일에서 MySQL 테이블로 데이터로드

은 같은 Yahoo! Search Marketing Advertiser Bid-Impression-Click data on competing Keywords data의 처음 몇 줄을 보면 무엇을 :

1 08bade48-1081-488f-b459-6c75d75312ae 2 2affa525151b6c51 79021a2e2c836c1a 327e089362aac70c fca90e7f73f3c8ef af26d27737af376a 100.0 2.0 0.0 
29 08bade48-1081-488f-b459-6c75d75312ae 3 769ed4a87b5010f4 3d4b990abb0867c8 cd74a8342d25d090 ab9f74ae002e80ff af26d27737af376a 100.0 1.0 0.0 
29 08bade48-1081-488f-b459-6c75d75312ae 2 769ed4a87b5010f4 3d4b990abb0867c8 cd74a8342d25d090 ab9f74ae002e80ff af26d27737af376a 100.0 1.0 0.0 
11 08bade48-1081-488f-b459-6c75d75312ae 1 769ed4a87b5010f4 3d4b990abb0867c8 cd74a8342d25d090 ab9f74ae002e80ff af26d27737af376a 100.0 2.0 0.0 
76 08bade48-1081-488f-b459-6c75d75312ae 2 769ed4a87b5010f4 3d4b990abb0867c8 cd74a8342d25d090 ab9f74ae002e80ff af26d27737af376a 100.0 1.0 0.0 
48 08bade48-1081-488f-b459-6c75d75312ae 3 2affa525151b6c51 79021a2e2c836c1a 327e089362aac70c fca90e7f73f3c8ef af26d27737af376a 100.0 2.0 0.0 
97 08bade48-1081-488f-b459-6c75d75312ae 2 2affa525151b6c51 79021a2e2c836c1a 327e089362aac70c fca90e7f73f3c8ef af26d27737af376a 100.0 1.0 0.0 
123 08bade48-1081-488f-b459-6c75d75312ae 5 769ed4a87b5010f4 3d4b990abb0867c8 cd74a8342d25d090 ab9f74ae002e80ff af26d27737af376a 100.0 1.0 0.0 
119 08bade48-1081-488f-b459-6c75d75312ae 3 2affa525151b6c51 79021a2e2c836c1a 327e089362aac70c fca90e7f73f3c8ef af26d27737af376a 100.0 1.0 0.0 
73 08bade48-1081-488f-b459-6c75d75312ae 1 2affa525151b6c51 79021a2e2c836c1a 327e089362aac70c fca90e7f73f3c8ef af26d27737af376a 100.0 1.0 0.0 

이 데이터는 야후에서에서만 사용할 수 있습니다 요청시. 나는 load data infile 문을 사용하여 MySQL의 테이블에 플랫 파일에서이 데이터를로드하려고

(1) "ydata-ysm-keyphrase-bid-imp-click-v1_0.gz" contains the following fields: 

    0 day 
    1 anonymized account_id 
    2 rank 
    3 anonymized keyphrase (expressed as list of anonymized keywords) 
    4 avg bid 
    5 impressions 
    6 clicks 

    Primary key of the data is a combination of fields date, account_id, rank and keyphrase. Average bid, impressions and 
    clicks information is aggregated over the primary key. 

: 여기

는 데이터의 설명이다.
질문 1 : 나는 별도의 varchar 열로를 지정하는 경우, 또는 데이터 형식이 일반적으로

, 나는 컬럼의 데이터 유형을 지정하는 방법을 이해하지만, 확실하지 3 anonymized keyphrase (expressed as list of anonymized keywords)에 대해 오전 생각 그것들을 "목록"유형으로 함께 저장할 수 있습니까?


다음은 현재이 데이터를 보관할 테이블을 만드는 쿼리입니다.

# create a new database 
create database webscopedata; 
show databases; 
use webscopedata; 

# create the table 
drop table bidders; 
create table bidders (
    daynum int, 
    account_id varchar(40), 
    rank int, 
    keyphrase1 varchar(100), 
    keyphrase2 varchar(100), 
    keyphrase3 varchar(100), 
    keyphrase4 varchar(100), 
    keyphrase5 varchar(100), 
    avg_bid double, 
    impressions double, 
    clicks double); 

는 지금은 쿼리를 실행하려고하면

load data infile "ydata-ysm-keyphrase-bid-imp-click-v1_0" into table bidders fields terminated by "\t"; 

나는 탭 구분 기호를 지정할 때, 나는 오류 얻을 것을 :

Error Code: 1261. Row 1 doesn't contain data for all columns 

이 믿고 날 리드를 탭 구분 기호를 지정할 때 필드가 올바르게 구분되지 않습니다. 그래서 쿼리를 사용하여 여러 구분 기호를 지정하려고 : 여기

load data infile "ydata-ysm-keyphrase-bid-imp-click-v1_0" into table bidders fields terminated by "' '\t"; 

나는 여러 필드 터미네이터를 사용하는 것을 시도하고있다,하지만이 작동하지 않는 것, 그리고 오류 얻을 :
Error Code: 1265. Data truncated for column 'daynum' at row 1

을 질문 2 : 어떻게 여러 구분 기호로이 데이터의 구문 분석을 지정할 수 있습니까?

+0

행 1은 첫 번째 열에 유효한 숫자 1 alue 1), 데이터 파싱의 오류 일 수 있습니다.값이'null' 인 경우에도 '1265'오류가 발생할 수 있기 때문에 올바른 구분 기호를 사용하고 있는지 확인할 수 있습니다. – activatedgeek

+0

질문 1에 대해서는 [this] (http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database-column-really-that-bad) 토론을 참조하십시오. 또한 '데이터의 기본 키는 date, account_id, rank 및 keyphrase 필드의 조합입니다.'라고 생각하면 keyphrase는 단일 열이어야한다고 생각합니다. 두 번째 질문으로 넘어갑니다. 여러 개의 구분 기호를 지정하는 대신 데이터 파일의 패턴을 알고 있으므로 파서에있는 열의 하위 집합을 병합하면됩니다. – activatedgeek

+0

@activatedGeek 1. 올바른 구분 기호를 사용하고 있는지 어떻게 확인할 수 있습니까? 2. "파서에서 열의 하위 집합을 병합"하는 것이 무슨 뜻인지 이해하지 못합니다. – tchakravarty

답변

0

펄 정규 표현식을 사용하여 데이터 파일을 다시 포맷하고 mysql로드 데이터 기능을 사용하여 가져올 수 있습니다. ' "'종료 테이블 입찰자 필드에"pathToYourDataFile/데이터 파일 "INFILE

로드 데이터를 데이터 파일을

#!/usr/bin/perl -w 
use strict; 
open(FH, "<", "ydata-ysm-keyphrase-bid-imp-click-v1_0"); 
my ($line, $data) =(); 
while(<FH>){ 
$line = $_; 
$line = qq($line); 
$line=~s/(\s+)/"/g; 
$line=~s/(\s*)"$//; 
$data .= $line."\n"; 
} 
close FH; 

open(FH, ">", "DataFile"); 
print FH $data; 
close FH; 

를 다시 포맷 그리고 MySQL의에서 다음 문을 실행하는 펄 스크립트 다음

사용;

희망 사항 : mysql에 데이터를 가져 오는 문제가 해결되었습니다.

+0

음, 데이터 세트가 8.5GB이고 이것이 확장 가능한 옵션인지 확신 할 수 없습니다. 정말 SQL을 사용하는 방법을 이해하고 싶습니다. – tchakravarty

관련 문제