Что команда SQL должна возвратить имена полей таблицы?

Язык: Scala Spark version: 1.5.2

У меня была такая же проблема, а также попытался разрешить ее с помощью udfs, но, к сожалению, это привело к появлению большего количества проблем позже в коде из-за тип несоответствий. Я смог обойти это, сначала преобразовывая DF в RDD, а затем группируя и обрабатывая данные желаемым способом, а затем преобразовывая RDD обратно в DF следующим образом:

val df = sc
     .parallelize(Seq(
        ("username1", "friend1"),
        ("username1", "friend2"),
        ("username2", "friend1"),
        ("username2", "friend3")))
     .toDF("username", "friend")

+---------+-------+
| username| friend|
+---------+-------+
|username1|friend1|
|username1|friend2|
|username2|friend1|
|username2|friend3|
+---------+-------+

val dfGRPD = df.map(Row => (Row(0), Row(1)))
     .groupByKey()
     .map{ case(username:String, groupOfFriends:Iterable[String]) => (username, groupOfFriends.mkString(","))}
     .toDF("username", "groupOfFriends")

+---------+---------------+
| username| groupOfFriends|
+---------+---------------+
|username1|friend2,friend1|
|username2|friend3,friend1|
+---------+---------------+
37
задан WalkingRandomly 21 September 2008 в 07:05
поделиться

12 ответов

MySQL 3 и 4 (и 5):

desc tablename

, который является псевдонимом для

show fields from tablename

SQL Server (с 2000) и MySQL 5:

select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME = 'tablename'

Завершение ответа: как люди ниже сказали, в SQL Server, можно также использовать хранимую процедуру sp_help

exec sp_help 'tablename'
59
ответ дан marc_s 10 October 2019 в 08:35
поделиться

Стандарт SQL-92 определяет INFORMATION_SCHEMA который приспосабливание rdbms's как поддержка SQL Server MS. Следующие работы для SQL Server 2000 MS/2005/2008 и MySql 5 и выше

select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'myTable'

Конкретный SQL-сервер мс:

exec sp_help 'myTable'

Это решение возвращает несколько наборов результатов, в которых информация, которой Вы требуете, где, поскольку первый дает Вам точно, что Вы хотите.

Также только для полноты можно запросить sys таблицы непосредственно. Это не рекомендуется, поскольку схема может измениться между версиями SQL Server, и INFORMATION_SCHEMA является слоем абстракции выше этих таблиц. Но здесь это так или иначе для SQL Server 2000

select [name] from dbo.syscolumns where id = object_id(N'[dbo].[myTable]')
12
ответ дан Vinko Vrsalovic 10 October 2019 в 08:35
поделиться

Можно использовать обеспеченные системные представления, чтобы сделать это:

, например,

select * from INFORMATION_SCHEMA.COLUMNS
where table_name = '[table name]'

альтернативно, можно использовать систему proc sp_help

, например,

sp_help '[table name]'
4
ответ дан jules 10 October 2019 в 08:35
поделиться

PostgreSQL понимает

select column_name from information_schema.columns where table_name = 'myTable'

синтаксис. Если Вы работаете в оболочке psql, можно также использовать

\d myTable

для описания (столбцы, и их типы данных и ограничения)

4
ответ дан dland 10 October 2019 в 08:35
поделиться

Только для полноты, так как MySQL и Пост-ГРЭС были уже упомянуты: С SQLite используйте" pragma table_info()"

sqlite> pragma table_info('table_name');
cid         name        type        notnull     dflt_value  pk        
----------  ----------  ----------  ----------  ----------  ----------
0           id          integer     99                      1         
1           name                    0                       0         
3
ответ дан 8jean 10 October 2019 в 08:35
поделиться

Для тех, которые ищут ответ в Oracle:

SELECT column_name FROM user_tab_columns WHERE table_name = 'TABLENAME'
4
ответ дан mauris 10 October 2019 в 08:35
поделиться

В SQL Sybase Где угодно, столбцы и информация о таблице хранятся отдельно, таким образом, Вам нужно соединение:

select c.column_name from systabcol c 
       key join systab t on t.table_id=c.table_id 
       where t.table_name='tablename'
2
ответ дан Graeme Perrow 10 October 2019 в 08:35
поделиться

MySQL является тем же:

select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'tablename'
1
ответ дан Veynom 10 October 2019 в 08:35
поделиться

Если Вы просто хотите имена столбцов, то

select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'tablename'

На SQL Server MS, для получения дополнительной информации о таблице, такой как типы столбцов, использование

sp_help 'tablename'
1
ответ дан Matt Howells 10 October 2019 в 08:35
поделиться

Для IBM DB2 (проверит это дважды в понедельник, чтобы быть уверенным.)

SELECT TABNAME,COLNAME from SYSCAT.COLUMNS where TABNAME='MYTABLE'
1
ответ дан Sabyasachi Mishra 10 October 2019 в 08:35
поделиться

MySQL

describe tablename
0
ответ дан Z99 10 October 2019 в 08:35
поделиться

Это - также MySQL Specific:

show fields from [tablename];

это только показывает имена таблиц, но это также вытаскивает всю информацию о полях.

2
ответ дан Steve Obbayi 10 October 2019 в 08:35
поделиться
Другие вопросы по тегам:

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