Мне нужен столбец с несколькими значениями, он может быть реализован как поле xml
. Он может быть преобразован в запятую, если это необходимо
, запрашивающий список XML в sql-сервере, используя Xquery .
Будучи полем xml, некоторые проблемы могут быть устранены.
С CSV: не может гарантировать, что каждое значение является правильный тип данных: нет возможности предотвратить 1,2,3, банан, 5
С XML: значения в теге могут быть принудительно заданы для типа
С CSV: не удается использовать ограничения внешнего ключа для привязки значений к таблице поиска;
С XML: все еще проблема
С CSV: не может обеспечить уникальность: никакой возможности предотвратить 1,2,3,3 , 3,5
С XML: все еще проблема
С CSV: невозможно удалить значение из списка, не извлекая весь список.
С XML: отдельные элементы могут быть удалены
С CSV: трудно найти все объекты с заданным значением в списке; вам нужно использовать неэффективное сканирование таблицы.
С XML: поле xml можно индексировать
С CSV: трудно подсчитать элементы в списке или сделать другой агрегат запросы. **
С XML: не особо сложно
С CSV: трудно присоединить значения к справочной таблице, к которой они ссылаются. **
С XML: не особенно сложно
С CSV: трудно получить список в отсортированном порядке.
С XML: не особо сложно
С CSV: сохранение целых чисел в виде строк занимает в два раза больше места, чем сохранение двоичных целых чисел.
С XML: память еще хуже, чем csv
С CSV: Плюс много запятых.
С использованием XML: теги используются вместо запятых
Короче говоря, использование XML затрагивает некоторые проблемы с ограниченным списком И может быть при необходимости преобразуется в список с разделителями
Ваши данные CSV должны быть в правильном формате. Есть несколько ненужных пробелов, которые затрудняют анализ, поскольку он включает пробелы в именах заголовков, на основании которых он сохраняет имена свойств в объектах.
cpu-util.csv должно быть
Computer_ID,timestamp,value,Percentage
1,01-07-11 0:00,0.8,8
. Кроме того, d3.js анализирует данные, сохраняя метки заголовков. поэтому массив computerid
должен быть заполнен с использованием свойства Computer_ID
данных. Таким образом, ваш код должен выглядеть примерно так:
<script>
var timestamp = [],
computerid = [],
percentage = [];
d3.csv("cpu-util.csv", function(data) {
console.log(data); //see the data structure
for (var i = 0; i < data.length; i++) {
timestamp[i] = data[i].timestamp; //use the property names.
computerid[i] = data[i].Computer_ID;
percentage[i] = data[i].Percentage;
console.log(computerid[i]);
console.log(timestamp[i]);
console.log(percentage[i]);
}
console.log(computerid[0]); //this will appear as it is within the function and
//the array is filled by the time this line is run
});
console.log(computerid[0]); //this will be undefined due to the asynchronous nature of javascript.
//This line of code runs before the for loop within the function
</script>
Если вы видите журнал консоли, console.log(computerid[0])
появится первым в журнале, а не перед тремя другими в функции, из-за асинхронного характера javascript. Есть способы, с помощью которых вы можете объединить функции в синхронные функции, используя Async / Await или Promises.
Также d3.js анализирует всю информацию как строки. Поэтому числовые значения, такие как Percentage
, необходимо преобразовать в числовые типы данных с помощью функции. Просто имейте это в виду.