MySQL在没有引号的情况下选择进入Outfile

时间:2013-01-04 22:12:54

标签: mysql into-outfile infobright

是否可能,如果是这样的话,我可以SELECT ... INTO OUTFILE并且不要将它包含在任何角色中。

到目前为止,这不起作用:

  SELECT hour_stamp,
         day_stamp,
         month_stamp,
         hour,
         day,
         month,
         year,
         quarter,
         day_of_week,
         week_of_year,
         SUBSTR(hour_text,1,24),
         SUBSTR(day_text,1,24)
    FROM date_dim
  INTO OUTFILE '/media/ssd0/temp/dates.tsv' 
  FIELDS TERMINATED BY '\t'
  ENCLOSED BY '';

我不确定引擎在这种情况下是否重要,但重要的是要注意我在Linux机器上使用InfoBright。

输出如下:

1293840000000   1293840000000   1293840000000   0   1   1   2011    1   5   52  "2011-01-01T00:00:00"   "2011-01-01T00:00:00"
1293843600000   1293840000000   1293840000000   1   1   1   2011    1   5   52  "2011-01-01T01:00:00"   "2011-01-01T00:00:00"
1293847200000   1293840000000   1293840000000   2   1   1   2011    1   5   52  "2011-01-01T02:00:00"   "2011-01-01T00:00:00"
1293850800000   1293840000000   1293840000000   3   1   1   2011    1   5   52  "2011-01-01T03:00:00"   "2011-01-01T00:00:00"

3 个答案:

答案 0 :(得分:0)

添加OPTIONALLY ENCLOSED BY ''可能会产生预期效果。

答案 1 :(得分:0)

没有任何东西尝试:

  SELECT hour_stamp,
         day_stamp,
         month_stamp,
         hour,
         day,
         month,
         year,
         quarter,
         day_of_week,
         week_of_year,
         SUBSTR(hour_text,1,24),
         SUBSTR(day_text,1,24)
    FROM date_dim
  INTO OUTFILE '/media/ssd0/temp/dates.tsv';

这是一个示例

mysql> desc veto.prova;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| provaemail | varchar(255) | NO   |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+
2 rows in set (0.05 sec)

mysql> select * from veto.prova;
+----+--------------------------+
| id | provaemail               |
+----+--------------------------+
|  1 | redwards@logicworks.net  |
|  2 | rolandoedwards@yahoo.com |
+----+--------------------------+
2 rows in set (0.00 sec)

mysql> select id,provaemail from prova into outfile 'C:/lwdba/prova.txt';
Query OK, 2 rows affected (0.01 sec)

mysql>

在磁盘上看起来是什么???

C:\>cd lwdba

C:\LWDBA>type prova.txt
1       redwards@logicworks.net
2       rolandoedwards@yahoo.com

C:\LWDBA>

我尝试了一些奇怪的事情。我以\0

结束了
mysql> select id,provaemail,substr(provaemail,1,5) from prova into outfile 'C:/lwdba/prova9.txt' fields terminated by '\0';
Query OK, 2 rows affected, 1 warning (0.00 sec)

mysql> show warnings;
+---------+------+------------------------------------------------------------------------------------------------------------------------+
| Level   | Code | Message                                                                                                                |
+---------+------+------------------------------------------------------------------------------------------------------------------------+
| Warning | 1475 | First character of the FIELDS TERMINATED string is ambiguous; please use non-optional and non-empty FIELDS ENCLOSED BY |
+---------+------+------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select id,provaemail,substr(provaemail,1,5) from prova into outfile 'C:/lwdba/prova8.txt' fields enclosed by '\0';
Query OK, 2 rows affected (0.00 sec)

mysql>

文件如下所示:

C:\LWDBA>type prova9.txt
1 redwards@logicworks.net redwa
2 rolandoedwards@yahoo.com rolan

C:\LWDBA>type prova8.txt
 1       redwards@logicworks.net         redwa
 2       rolandoedwards@yahoo.com        rolan

C:\LWDBA>

我使用\0,因为它是一个空字符。

您看到的双引号异常可能是由于InfoBright存储引擎以及它如何呈现函数调用的字符输出。

这是一个奇怪的建议,但我不知道它是否会起作用......

如果创建子查询,数据始终存储在MySQL临时表中。改变查询:

mysql> select * from (select id,provaemail,substr(provaemail,1,5) as stuff from prova) A
-> A into outfile 'C:/lwdba/prova444.txt' fields terminated by '\0' enclosed by '\0';
Query OK, 2 rows affected (0.00 sec)

mysql>

在你的情况下,那将是

SELECT * FROM (
  SELECT hour_stamp,
         day_stamp,
         month_stamp,
         hour,
         day,
         month,
         year,
         quarter,
         day_of_week,
         week_of_year,
         SUBSTR(hour_text,1,24) ht,
         SUBSTR(day_text,1,24) dt
    FROM date_dim) A
  INTO OUTFILE '/media/ssd0/temp/dates.tsv';

看看是否有不同之处

答案 2 :(得分:0)

你试过“Null”吗?

SELECT hour_stamp,
     day_stamp,
     month_stamp,
     hour,
     day,
     month,
     year,
     quarter,
     day_of_week,
     week_of_year,
     SUBSTR(hour_text,1,24),
     SUBSTR(day_text,1,24)
FROM date_dim
INTO OUTFILE '/media/ssd0/temp/dates.tsv' 
FIELDS TERMINATED BY '\t'
ENCLOSED BY 'NULL';