Объединяйте файлы из разных путей в USQL - PullRequest
1 голос
/ 28 января 2020

Мои данные ежедневно сохраняются по следующему пути: "/Data/ndomyeargoti/ndommonth‹/ enjday‹/mydata.json" Так, например, "/ Data / 2018/10/1 /mydata.json "," /Data/2018/10/2/mydata.json "," /Data/2018/11/1/mydata.json "," / Data / 2018/12 / 5 / mydata. json ", et c.

Я хотел бы объединить все месяцы и дни в одном файле, используя U SQL. Можно ли сделать это простым способом, не упоминая каждый путь в отдельности (в противном случае это безумие для всех дней года)?

На данный момент я использую это:

    
REFERENCE ASSEMBLY [Newtonsoft.Json];
REFERENCE ASSEMBLY [Microsoft.Analytics.Samples.Formats];

USING Microsoft.Analytics.Samples.Formats.Json;


@a  =
   EXTRACT EventCategory string
          , EventAction string
		  , EventLabel string
    FROM  "/Data/2018/10/2/mydata.json"
    USING new JsonExtractor()

	UNION ALL 
	
 EXTRACT EventCategory string
          , EventAction string
		  , EventLabel string
    FROM  "/Data/2018/11/2/mydata.json"
   USING new JsonExtractor(); 

 OUTPUT @a
   TO "/Output/mydata.Csv"
  USING Outputters.Csv(outputHeader:true);  
    
    

1 Ответ

1 голос
/ 28 января 2020

Я хотел бы объединить все месяцы и дни в одном файле, используя U SQL. Можно ли сделать это простым способом, не упоминая каждый путь в отдельности (в противном случае это безумие для всех дней года)?

Да! Вы можете сделать это, используя шаблоны, например: c:

REFERENCE ASSEMBLY [Newtonsoft.Json];
REFERENCE ASSEMBLY [Microsoft.Analytics.Samples.Formats];

DECLARE @input string = "/Data/2018/{*}/2/mydata.json";

USING Microsoft.Analytics.Samples.Formats.Json;

@a  =
   EXTRACT EventCategory string
          , EventAction string
          , EventLabel string
    FROM  @input
    USING new JsonExtractor()

 OUTPUT @a
   TO "/Output/mydata.Csv"
  USING Outputters.Csv(outputHeader:true);  

. Это загрузит все данные второго дня месяца.

Другие варианты:

DECLARE @input string = "/Data/2018/{*}/{*}/mydata.json"; обработает все файлы 2018

DECLARE @input string = "/Data/{*}/12/{*}/mydata.json"; обработает все файлы, созданные в 12-м месяце всех лет

Если вы хотите получить части файла, чтобы получить фактическую дату части, которые вы можете сделать:

REFERENCE ASSEMBLY [Newtonsoft.Json];
REFERENCE ASSEMBLY [Microsoft.Analytics.Samples.Formats];

USING Microsoft.Analytics.Samples.Formats.Json;

@a  =
   EXTRACT EventCategory string
          , EventAction string
          , EventLabel string
          , date DateTime
    FROM  "/Data/{date:yyyy}/{date:MM}/{date:dd}/mydata.json"
    USING new JsonExtractor()

 OUTPUT @a
   TO "/Output/mydata.Csv"
  USING Outputters.Csv(outputHeader:true);  

Как видите, теперь есть дополнительный столбец date типа DateTime, который можно использовать в запросе и / или включить в вывод.

...