我正在尝试在Hive中设置一些将日期作为动态参数的视图.在我下面的工作中,我已经交换了在Select子句中使用hiveconf变量,所以我们可以看到发生了什么,但原理保持不变
根据这个和这个,我应该能够在我的Create View语句中的"$ {hiveconf:dateRangeFrom}"中包含一个语句,在运行时提供hiveconf:dateRangeFrom变量以获得最大的快乐,但这只是没有发生 - Hive似乎在创建View时使用赋给变量的任何值,并将其硬编码到View定义中,而不是像运行时那样在运行时替换它.
我有一个解决方法,我给sql文件提供一个参数,然后创建所有的视图,替换所需的值,但这是不可持续的
所有工作都在下面,所以你可以看到我是如何得出这个结论的.有任何想法吗?
(需要是最终查询的日期)
hive -e "Select ${hiveconf:dateRangeFrom} , unix_timestamp(${hiveconf:dateRangeFrom} , 'yyyy-MM-dd');" --hiveconf dateRangeFrom='2014-01-01'
Run Code Online (Sandbox Code Playgroud)
日期将按照提供的方式返回,并转换为unix时间戳(例如"2014-01-01"= 1388534400,"2014-09-12"= 41047640).可以重复运行脚本,并使用参数相应地更改结果.
CREATE VIEW get_date AS
SELECT ${hiveconf:dateRangeFrom}, unix_timestamp(${hiveconf:dateRangeFrom} , 'yyyy-MM-dd');
Run Code Online (Sandbox Code Playgroud)
这会返回错误:
FAILED: ParseException line 2:8 cannot recognize input near '$' '{' 'hivevar' in select clause
Run Code Online (Sandbox Code Playgroud)
大概是因为它试图进行替换,但$ {hivevar:dateRangeFrom}变量此时尚未初始化
根据: 使用参数和 http://mail-archives.apache.org/mod_mbox/hive-user/201205.mbox/%3CBAY151-W9BC976D584FD172E7D70BC0160@phx.gbl%3E 在Hive中创建视图
然后,只要在它们周围使用引号,就可以在Hive视图中使用变量:
CREATE VIEW get_date AS
SELECT "${hiveconf:dateRangeFrom}", unix_timestamp("${hiveconf:dateRangeFrom}" , 'yyyy-MM-dd');
Run Code Online (Sandbox Code Playgroud)
这允许创建视图,因此尝试使用参数调用视图:
hive -e "Select * from get_date" --hiveconf dateRangeFrom='2014-01-01'
Run Code Online (Sandbox Code Playgroud)
只返回变量名称:
${hiveconf:dateRangeFrom} …Run Code Online (Sandbox Code Playgroud) 没有人喜欢我的第一个问题: 使用Unity for Work of Work/Repository模式创建Entity Framework对象
所以我设法把它改写成你可以阅读而不会入睡/失去生存意愿的东西.
我正在创建一个对象DataAccessLayer,它在构造函数中有2个接口:IUnitOfWork和IRealtimeRepository:
public DataAccessLayer(IUnitOfWork unitOfWork,
IRealtimeRepository realTimeRepository)
{
this.unitOfWork = unitOfWork;
this.realTimeRepository = realTimeRepository;
}
Run Code Online (Sandbox Code Playgroud)
现在,实现IRealtimeRepository的构造函数也接受IUnitOfWork参数:
public DemoRepository(IUnitOfWork unitOfWork)
{
this.unitOfWork = unitOfWork;
}
Run Code Online (Sandbox Code Playgroud)
在Unity容器设置中,我然后添加两个实现:
container.RegisterType<IUnitOfWork, communergyEntities>();
container.RegisterType<IRealtimeRepository, DemoRepository>();
Run Code Online (Sandbox Code Playgroud)
会发生什么是Unity创建2个新的IUnitOfWork实例(实际上是一个实体框架数据上下文),一个用于DataAccessLayer构造函数,一个用于DemoRepository构造函数
由于这是针对工作单元模式,因此重用相同的实例非常重要.有任何想法吗?我之前已经问过类似的问题,但是没有被接受
有了StackOverflow的一些帮助,我有Unity Framework来创建我的链接依赖项,包括一个Entity Framework datacontext对象:
using (IUnityContainer container = new UnityContainer())
{
container.RegisterType<IMeterView, Meter>();
container.RegisterType<IUnitOfWork, CommunergySQLiteEntities>(new ContainerControlledLifetimeManager());
container.RegisterType<IRepositoryFactory, SQLiteRepositoryFactory>();
container.RegisterType<IRepositoryFactory, WCFRepositoryFactory>("Uploader");
container.Configure<InjectedMembers>()
.ConfigureInjectionFor<CommunergySQLiteEntities>(
new InjectionConstructor(connectionString));
MeterPresenter meterPresenter = container.Resolve<MeterPresenter>();
Run Code Online (Sandbox Code Playgroud)
这非常适合创建我的Presenter对象并显示相关视图,我真的很高兴.
但是,我现在遇到的问题是创建和处理Entity Framework对象的时间(我怀疑这将适用于任何IDisposable对象).像这样使用Unity,SQL EF对象"CommunergySQLiteEntities"是立即创建的,因为我已将其接口IUnitOfWork添加到MeterPresenter的构造函数中
public MeterPresenter(IMeterView view, IUnitOfWork unitOfWork, IRepositoryFactory cacheRepository)
{
this.mView = view;
this.unitOfWork = unitOfWork;
this.cacheRepository = cacheRepository;
this.Initialize();
}
Run Code Online (Sandbox Code Playgroud)
我当时对此感到有点不安,因为我不想保持打开数据库连接,但我看不到使用Unity依赖注入的任何其他方式.果然,当我实际尝试使用datacontext时,我收到此错误:
((System.Data.Objects.ObjectContext)(unitOfWork)).Connection
'((System.Data.Objects.ObjectContext)(unitOfWork)).Connection'
threw an exception of type 'System.ObjectDisposedException'
System.Data.Common.DbConnection {System.ObjectDisposedException}
Run Code Online (Sandbox Code Playgroud)
我对IoC原理的理解是,您将所有依赖项设置在顶部,解决您的对象并远离您.但是,在这种情况下,某些子对象(例如datacontext)不需要在创建父Presenter对象时初始化(就像在构造函数中传递它们一样),但是Presenter确实需要了解IUnitOfWork在与数据库通信时使用的类型.
理想情况下,我想在我解决的Presenter中找到这样的东西:
using(IUnitOfWork unitOfWork = new NewInstanceInjectedUnitOfWorkType())
{
//do unitOfWork stuff
}
Run Code Online (Sandbox Code Playgroud)
因此,Presenter知道IUnitOfWork实现用于直接创建和处理的内容,最好是从原始的RegisterType调用.我是否必须在我的Presenter中放置另一个Unity容器,否则可能会产生新的依赖关系?
对于IoC大师来说,这可能是非常明显的,但我真的很欣赏指向正确方向的指针.
出于兴趣,是否可以确定JavaScript变量的大小(以字节为单位)?
我有一个在桌面上运行良好但blows up在iPad上运行*的网络应用程序.我猜这是因为iPad Safari中的内存量有限,但我想知道我的应用程序中发生了什么.
我可以根据JSON源的大小估计相对大小,但知道序列化对象的实际大小会更好
我在最新的网络应用程序中一直使用knockout.js,这很棒.但是,我现在需要实现一个树视图,当前的竞争者在这里:http://www.programmingsolution.net/useful-js/jquery-treeview.php
JSTree是在当前发展中的一个,但似乎需要用HTML或JSON被初始化 - 在淘汰赛中,我非常想有自动构建了UL列表,树形视图,然后后自动更新."Treeview"似乎能够使用现有的ul列表,但已被弃用
有没有其他人有任何使用淘汰赛树视图的经验?
我正在给MVVMCross一个旋转,看看它是否会在一些更大的项目中出现,而且它很棒.我喜欢导航,viewModel位置和一般的跨平台方法,这正是我需要的.但是,根据平台的不同,我有点坚持拆分一些依赖注入.
因此,我们有一个基本的应用程序,带有一个共享的可移植库,在启动时初始化服务引用:
public TwitterSearchApp()
{
InitaliseServices();
}
private void InitaliseServices()
{
this.RegisterServiceInstance<ITwitterSearchProvider>(new TwitterSearchProvider());
}
Run Code Online (Sandbox Code Playgroud)
精细.这定义了将在所有平台上使用的服务实现.但是我需要在不同平台上实现不同实现的情况如何 - 例如可能存储/缓存,核心要求相同,但需要在手机上以不同于平板电脑的方式进行处理.
我以为它可能会在某处安装:
public class Setup : MvxBaseWinRTSetup
{
public Setup(Frame rootFrame): base(rootFrame)
{
}
protected override MvxApplication CreateApp()
{
var app = new TwitterSearchApp();//set platorm specific IoC here maybe?
return app;
}
protected override void AddPluginsLoaders(Cirrious.MvvmCross.Platform.MvxLoaderPluginRegistry loaders)
{ // or perhaps here?
loaders.AddConventionalPlugin<Cirrious.MvvmCross.Plugins.Visibility.WinRT.Plugin>();
base.AddPluginsLoaders(loaders);
}
}
Run Code Online (Sandbox Code Playgroud)
但我不确定.我已经看到了替换ViewModel定位器的引用,但有没有类似的方法来替换其他IoC服务?
谢谢,一般的框架工作很棒,我真的很喜欢它的工作原理(除了这一点,我还不能理解)
托比
我已经获得了一个自定义的Silverlight控件,每次我在Blend中打开它时,都会出现"DOM/scripting bridge is disabled"错误.
查看控件的源代码,我可以看到调用
public override void OnApplyTemplate()
{
...
HtmlPage.Window.Invoke("GetPrimaryGradStart").ToString()
Run Code Online (Sandbox Code Playgroud)
我猜这可能是问题所在.关于我能做什么的任何想法,还是我回到纯XAML?
干杯
托比
.net ×2
javascript ×2
hadoop ×1
hive ×1
jquery ×1
knockout.js ×1
mvvmcross ×1
silverlight ×1
unit-of-work ×1