Fitbit Data Export - Создание хранилища данных - PullRequest
0 голосов
/ 22 октября 2018

Я планирую создать хранилище данных Fitbit для образовательных целей, и, похоже, в Интернете нет материалов, специально предназначенных для данных Fitbit.

С некоторыми проблемами столкнулись:

  1. Вы можете экспортировать только 1 месяц данных (максимум) с веб-сайта Fitbit.Мой план состоял бы в том, чтобы за один раз помещать данные за месяц в папку, и эти файлы читать отдельно.

  2. Вы можете экспортировать данные через CSV или .XLS.Проблема с XLS заключается в том, что каждый день месяца будет создаваться отдельный лист для журналов продуктов питания, который затем необходимо будет объединить в промежуточной таблице.Проблема с CSV заключается в том, что для каждого файла существует один лист со всеми данными: CSV Layout

Затем я использовал бы SSIS для загрузкиданные в базу данных SQL Server для целей отчетности.

Какой подход был бы более подходящим для экспорта данных с использованием формата .XLS или CSV?

Редактировать: Как можно было бы загрузитьCSV-файл в SSIS с таким форматом?

Формат CSV будет следующим:

Тело ,,,,,,,,, Дата, Вес, ИМТ, Жир ,,,,,, 01/06/2018,71,5, 23.29,15 ,,,,,, 02/06/2018,71.5,23.29,15 ,,,,,, 03/06/2018,71.5,23.29,15 ,,,,,, 04/06/2018,71.5,23.29,15 ,,,,,, 05/06/2018,71.5,23.29,15 ,,,,,, 06/06/2018,71.5,23.29,15 ,,,,,, 07/06/2018, 71.5,23.29,15 ,,,,,, 08/06/2018,71.5,23.29,15 ,,,,,, 09/06/2018,71.5,23.29,15 ,,,,,, 10/06/2018,71.5,23.29,15 ,,,,,, 11/06/2018,71.5,23.29,15 ,,,,,, 12/06 / 2018,71.5,23.29,15 ,,,,,, 13/06/2018,71.5,23.29,15 ,,,,,, 14/06 / 2018,71.5,23.29,15 ,,,,,, 15/06 / 2018,71.5,23.29,15 ,,,,,, 16 /06 / 2018,71.5,23.29,15 ,,,,,, 17/06 / 2018,71.5,23.29,15 ,,,,,, 18/06 / 2018,71.5,23.29,15 ,,,,,, 19/06/2018,71.5,23.29,15 ,,,,,, 20/06/2018,71.5,23.29,15 ,,,,,, 21/06 / 2018,71.5,23.29,15 ,,,,,,22/06 / 2018,71.5,23.29,15 ,,,,,, 23/06 / 2018,71.5,23.29,15 ,,,,,, 24/06 / 2018,71.5,23.29,15 ,,,,,, 25/06 / 2018,71.5,23.29,15 ,,,,,, 26/06 / 2018,71.5,23.29,15 ,,,,,, 27/06 / 2018,71.5,23.29,15 ,,,,,, 28/06 / 2018,71.5,23.29,15 ,,,,,, 29/06 / 2018,72.8,23.72,15 ,,,,,, 30 /06 / 2018,72.95,23.77,15 ,,,,,, ,,,,,,,,, *

Foods ,,,,,,,,,, Date, Calories In ,,,,,,,, 01/06/2018,0 ,,,,,,,, 02/06/2018,0 ,,,,,,,, 03/06/2018,0 ,,,,,,,, 04/06/ 2018,0 ,,,,,,,, 05/06/2018,0 ,,,,,,,, 06/06/2018,0 ,,,,,,,, 07/06/2018,0,,,,,,,, 08/06/2018,0 ,,,,,,,, 09/06/2018,0 ,,,,,,,, 10/06/2018,0 ,,,,,,,, 11/06/2018,0 ,,,,,,,, 12/06/2018,0 ,,,,,,,, 13/06/2018,100 ,,,,,,,,, 14/06/ 2018,0 ,,,,,,,, 15/06 / 2018,0 ,,,,,,,, 16/06 / 2018,0 ,,,,,,,, 17/06 / 2018,0,,,,,,,, 18/06/2018,0 ,,,,,,,, 19/06/2018,0 ,,,,,,,, 20/06/2018,0 ,,,,,,,, 21/06/2018,0 ,,,,,,,, 22/06/2018,0 ,,,,,,,, 23/06/2018,0 ,,,,,,,, 24/06/ 2018,0 ,,,,,,,, 25/06 / 2018,0 ,,,,,,,, 26/06 / 2018,0 ,,,,,,,, 27/06/2018, "1 644",,,,,,,, 28/06/2018," 2,390 ",,,,,,,, 29/06 / 2018,981 ,,,,,,,, 30/06/2018,0 ,,,,,,,,

Например, «Foods» будет именем таблицы, «Date» и «Calories In» будут именами столбцов.«01/06/2018» - это дата, «0» - это «калории в» и т. Д.

1 Ответ

0 голосов
/ 24 октября 2018

Хитрый, я просто вытащил свои данные о фитбите, так как это достигло моего любопытства.Это CSV грязный.Вы в основном смешали форматы файлов в одном файле.Это не будет прямо в SSIS.Формат XLS и, как вы упомянули, что журналы продуктов отмечаются каждый день на рабочем листе, SSIS не понравится, когда это будет изменено.

CSV: enter image description here XLS: enter image description here

Несколько вариантов в верхней части головы, которые я вижу для CSV.

Отдельный экспорт из Fitbit

Я вижу, вы можетевыберите, какие данные вы хотите включить в свой экспорт: Тело, Продукты питания, Деятельность, Сон.

  1. Выполните каждый экспорт по отдельности, сохранив каждый файл с префиксом того, какой это тип данных.
  2. Затем создайте SSIS с несколькими циклами foreach и задачей потока данных для каждого отдельного формата файла.

Это бы сделало это, но было бы утомительным усилием при экспорте данных из Fitbit.

Обрабатывать один файл со всеми данными

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

Один из вариантов - создать местоg таблица с таким количеством столбцов, какое из когда-либо разделов имеет наибольшее количество, что выглядит, возможно, как «Действия».Дайте каждому столбцу общее имя как Column1, Column2 и сделайте их все VARCHAR.

Поскольку мы смешали «форматы», и не все типы данных выстроились в ряд, нам просто нужно сначала получить все данные, а затем отсортироватьпреобразование позже.

Оттуда вы можете создать один поток данных и источник плоских файлов, а также получить добавленный номер строки , так как нам нужно разобраться, где каждый раздел данных будет позже.

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

  • Text Qualifier = "
  • Разделитель строки заголовка = {LF}
  • Разделитель строки = {LF}
  • Разделитель столбцов =,

Это должно привести к загрузке данных в базу данных, по крайней мере, в таблицу этапов. Оттуда вам потребуется использовать множество T-SQL для обнуленияв каждом «разделе» данных, а затем анализируем, конвертируем и загружаем оттуда.

Небольшой тест, который я сделал, я просто вызвал вызов таблицы TestTable:

CREATE TABLE [dbo].[TestTable](
    [LineNumber] [INT] NULL,
    [Column1] [VARCHAR](MAX) NULL,
    [Column2] [VARCHAR](MAX) NULL,
    [Column3] [VARCHAR](MAX) NULL,
    [Column4] [VARCHAR](MAX) NULL,
    [Column5] [VARCHAR](MAX) NULL,
    [Column6] [VARCHAR](MAX) NULL,
    [Column7] [VARCHAR](MAX) NULL,
    [Column8] [VARCHAR](MAX) NULL,
    [Column9] [VARCHAR](MAX) NULL
)

Поток данных и подключил файлисточник:

enter image description here

enter image description here

Выполнить поток данных, и затем я загрузил данные как:

enter image description here

Оттуда я разработал некоторый T-SQL, чтобы добраться до каждой «секции» данных. Вот пример, который показывает, как вы можете фильтровать в «Раздел "Еда":

DECLARE @MaxLine INT = (
                           SELECT MAX([LineNumber])
                           FROM   [TestTable]
                       );

--Something like this, using a sub query that gets you starting and ending line numbers for each section.
--Doing the conversion of what column that section of data ended up in.
SELECT     CONVERT(DATE, [a].[Column1]) AS [Date]
         , CONVERT(BIGINT, [a].[Column2]) AS [CaloriesIn]
FROM       [TestTable] [a]
INNER JOIN (
               --Something like this to build out starting and ending line number for each section
               SELECT [Column1]
                    , [LineNumber] + 2 AS [StartLineNumber] --We add 2 here as the line that start the data in a section is 2 after its "heading"
                    , LEAD([LineNumber], 1, @MaxLine) OVER ( ORDER BY [LineNumber] )
                      - 1 AS [EndLineNumber]
               FROM   [TestTable]
               WHERE  [Column1] IN ( 'Body', 'Foods', 'Activities' ) --Each of the sections of data
           ) AS [Section]
    ON [a].[LineNumber]
       BETWEEN [Section].[StartLineNumber] AND [Section].[EndLineNumber]
WHERE      [Section].[Column1] = 'Foods'; --Then just filter on what sectoin you want.

Что, в свою очередь, дало мне следующее:

enter image description here

Могут быть и другие варианты разбораэти данные, но это должно дать хорошую отправную точку и представление о том, насколько хитрым является этот конкретный CSV-файл.

Что касается опции XLS, то это будет прямолинейно для всех разделов, кроме журналов продуктов.В основном вы должны настроить подключение к файлу Excel, и каждый лист будет «таблицей» в источнике в потоке данных и иметь отдельные потоки данных для каждого рабочего листа.

enter image description here

Но тогда как насчет журналов еды.Как только они меняются, и вы переходите в следующий месяц, или что-то из SSIS может сойти с ума, ошибка, вероятно, будет жаловаться на метаданные.

Один очевидный обходной путь - это ручное манипулирование Excel и объединение всех их в один «Журнал продуктов»."лист до запуска через SSIS.Не идеально, потому что вы, вероятно, захотите что-то полностью автоматизированное.

Мне придется повозиться с этим.Может быть, задача скрипта и некоторый код на C #, чтобы объединить все эти листы в один, проанализировать дату из каждого имени листа и добавить его к данным до того, как поток данных загрузит их.Возможно, это возможно.

Похоже, есть проблемы с обоими файлами, которые Fitbit экспортирует независимо от того, в каком формате вы смотрите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...